mirror of
https://github.com/harivansh-afk/nix.git
synced 2026-04-15 13:03:45 +00:00
optimize the shit out of theme loading
switch neovim to vim.pack away from lazy add sandboxagent package to netty update defaults
This commit is contained in:
parent
6dfcfad05f
commit
30ac6bc674
24 changed files with 4764 additions and 646 deletions
|
|
@ -1,28 +1,19 @@
|
|||
local M = {}
|
||||
|
||||
function M.on_attach(_, bufnr)
|
||||
local function buf(mode, lhs, rhs)
|
||||
bmap(mode, lhs, rhs, { buffer = bufnr })
|
||||
end
|
||||
local function buf(mode, lhs, rhs) bmap(mode, lhs, rhs, { buffer = bufnr }) end
|
||||
|
||||
buf('n', 'gd', vim.lsp.buf.definition)
|
||||
buf('n', 'gD', vim.lsp.buf.declaration)
|
||||
buf('n', '<C-]>', vim.lsp.buf.definition)
|
||||
buf('n', 'gi', vim.lsp.buf.implementation)
|
||||
buf('n', 'gr', vim.lsp.buf.references)
|
||||
buf('n', 'K', vim.lsp.buf.hover)
|
||||
buf('n', '<leader>rn', vim.lsp.buf.rename)
|
||||
buf({ 'n', 'v' }, '<leader>ca', vim.lsp.buf.code_action)
|
||||
buf('n', '<leader>f', function() vim.lsp.buf.format({ async = true }) end)
|
||||
buf("n", "gd", vim.lsp.buf.definition)
|
||||
buf("n", "gD", vim.lsp.buf.declaration)
|
||||
buf("n", "<C-]>", vim.lsp.buf.definition)
|
||||
buf("n", "gi", vim.lsp.buf.implementation)
|
||||
buf("n", "gr", vim.lsp.buf.references)
|
||||
buf("n", "K", vim.lsp.buf.hover)
|
||||
buf("n", "<leader>rn", vim.lsp.buf.rename)
|
||||
buf({ "n", "v" }, "<leader>ca", vim.lsp.buf.code_action)
|
||||
buf("n", "<leader>f", function() vim.lsp.buf.format { async = true } end)
|
||||
end
|
||||
|
||||
function M.capabilities()
|
||||
local caps = vim.lsp.protocol.make_client_capabilities()
|
||||
local ok, blink = pcall(require, 'blink.cmp')
|
||||
if ok then
|
||||
caps = blink.get_lsp_capabilities(caps)
|
||||
end
|
||||
return caps
|
||||
end
|
||||
function M.capabilities() return vim.lsp.protocol.make_client_capabilities() end
|
||||
|
||||
return M
|
||||
|
|
|
|||
|
|
@ -1,48 +1,54 @@
|
|||
vim.pack.add({
|
||||
"https://github.com/saghen/blink.cmp",
|
||||
}, { load = function() end })
|
||||
|
||||
return {
|
||||
'saghen/blink.cmp',
|
||||
version = '*',
|
||||
event = { 'InsertEnter', 'LspAttach' },
|
||||
opts = {
|
||||
keymap = {
|
||||
['<Tab>'] = { 'select_and_accept', 'snippet_forward', 'fallback' },
|
||||
['<S-Tab>'] = { 'snippet_backward', 'fallback' },
|
||||
['<c-p>'] = { 'select_prev', 'fallback' },
|
||||
['<c-n>'] = { 'show', 'select_next', 'fallback' },
|
||||
['<c-y>'] = { 'select_and_accept', 'fallback' },
|
||||
['<c-e>'] = { 'cancel', 'fallback' },
|
||||
['<c-u>'] = { 'scroll_documentation_up', 'fallback' },
|
||||
['<c-d>'] = { 'scroll_documentation_down', 'fallback' },
|
||||
"saghen/blink.cmp",
|
||||
event = { "InsertEnter", "LspAttach" },
|
||||
keys = { { "<c-n>", mode = "i" } },
|
||||
after = function()
|
||||
require("blink.cmp").setup {
|
||||
keymap = {
|
||||
["<Tab>"] = { "select_and_accept", "snippet_forward", "fallback" },
|
||||
["<S-Tab>"] = { "snippet_backward", "fallback" },
|
||||
["<c-p>"] = { "select_prev", "fallback" },
|
||||
["<c-n>"] = { "show", "select_next", "fallback" },
|
||||
["<c-y>"] = { "select_and_accept", "fallback" },
|
||||
["<c-e>"] = { "cancel", "fallback" },
|
||||
["<c-u>"] = { "scroll_documentation_up", "fallback" },
|
||||
["<c-d>"] = { "scroll_documentation_down", "fallback" },
|
||||
},
|
||||
cmdline = { enabled = false },
|
||||
completion = {
|
||||
accept = {
|
||||
auto_brackets = { enabled = true },
|
||||
},
|
||||
cmdline = { enabled = false },
|
||||
completion = {
|
||||
accept = {
|
||||
auto_brackets = { enabled = true },
|
||||
},
|
||||
documentation = {
|
||||
auto_show = true,
|
||||
window = {
|
||||
border = 'single',
|
||||
scrollbar = false,
|
||||
winhighlight = 'Normal:BlinkCmpDoc,FloatBorder:BlinkCmpDocBorder',
|
||||
},
|
||||
},
|
||||
menu = {
|
||||
auto_show = true,
|
||||
border = 'single',
|
||||
scrollbar = false,
|
||||
winhighlight = 'Normal:BlinkCmpMenu,FloatBorder:BlinkCmpMenuBorder,CursorLine:BlinkCmpMenuSelection',
|
||||
draw = {
|
||||
treesitter = { 'lsp' },
|
||||
columns = {
|
||||
{ 'kind_icon', gap = 1 },
|
||||
{ 'label', 'label_description', gap = 1 },
|
||||
},
|
||||
},
|
||||
},
|
||||
ghost_text = { enabled = true },
|
||||
documentation = {
|
||||
auto_show = true,
|
||||
window = {
|
||||
border = "single",
|
||||
scrollbar = false,
|
||||
winhighlight = "Normal:BlinkCmpDoc,FloatBorder:BlinkCmpDocBorder",
|
||||
},
|
||||
},
|
||||
sources = {
|
||||
default = { 'lsp', 'path', 'buffer', 'snippets' },
|
||||
menu = {
|
||||
auto_show = true,
|
||||
border = "single",
|
||||
scrollbar = false,
|
||||
winhighlight = "Normal:BlinkCmpMenu,FloatBorder:BlinkCmpMenuBorder,CursorLine:BlinkCmpMenuSelection",
|
||||
draw = {
|
||||
treesitter = { "lsp" },
|
||||
columns = {
|
||||
{ "kind_icon", gap = 1 },
|
||||
{ "label", "label_description", gap = 1 },
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
ghost_text = { enabled = true },
|
||||
},
|
||||
sources = {
|
||||
default = { "lsp", "path", "buffer", "snippets" },
|
||||
},
|
||||
}
|
||||
end,
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,171 +1,108 @@
|
|||
vim.pack.add({
|
||||
"https://github.com/windwp/nvim-autopairs",
|
||||
"https://github.com/folke/flash.nvim",
|
||||
"https://github.com/kylechui/nvim-surround",
|
||||
"https://github.com/kevinhwang91/nvim-ufo",
|
||||
"https://github.com/kevinhwang91/promise-async",
|
||||
"https://github.com/barrettruth/pending.nvim",
|
||||
"https://github.com/barrettruth/preview.nvim",
|
||||
}, { load = function() end })
|
||||
|
||||
return {
|
||||
{
|
||||
'windwp/nvim-autopairs',
|
||||
config = true,
|
||||
},
|
||||
{
|
||||
'folke/flash.nvim',
|
||||
opts = {
|
||||
modes = { search = { enabled = true } },
|
||||
},
|
||||
config = function(_, opts)
|
||||
require('flash').setup(opts)
|
||||
map({ 'n', 'x', 'o' }, 's', function() require('flash').jump() end)
|
||||
map({ 'n', 'x', 'o' }, 'S', function() require('flash').treesitter() end)
|
||||
map('o', 'r', function() require('flash').remote() end)
|
||||
map({ 'o', 'x' }, 'R', function() require('flash').treesitter_search() end)
|
||||
map('c', '<c-s>', function() require('flash').toggle() end)
|
||||
end,
|
||||
},
|
||||
{
|
||||
'kylechui/nvim-surround',
|
||||
config = true,
|
||||
},
|
||||
{
|
||||
'kevinhwang91/nvim-ufo',
|
||||
dependencies = { 'kevinhwang91/promise-async' },
|
||||
opts = {
|
||||
provider_selector = function()
|
||||
return { 'treesitter', 'indent' }
|
||||
end,
|
||||
},
|
||||
config = function(_, opts)
|
||||
require('ufo').setup(opts)
|
||||
map('n', 'zR', require('ufo').openAllFolds)
|
||||
map('n', 'zM', require('ufo').closeAllFolds)
|
||||
end,
|
||||
},
|
||||
{
|
||||
enabled = false,
|
||||
'barrettruth/cp.nvim',
|
||||
dependencies = { 'ibhagwan/fzf-lua' },
|
||||
init = function()
|
||||
-- Keep uv cache in-project so cp.nvim scraping works in restricted environments.
|
||||
if vim.env.UV_CACHE_DIR == nil or vim.env.UV_CACHE_DIR == '' then
|
||||
local uv_cache_dir = vim.fn.getcwd() .. '/.uv-cache'
|
||||
vim.fn.mkdir(uv_cache_dir, 'p')
|
||||
vim.env.UV_CACHE_DIR = uv_cache_dir
|
||||
end
|
||||
|
||||
vim.g.cp = {
|
||||
languages = {
|
||||
python = {
|
||||
extension = 'py',
|
||||
commands = {
|
||||
run = { 'python3', '{source}' },
|
||||
debug = { 'python3', '{source}' },
|
||||
},
|
||||
},
|
||||
},
|
||||
platforms = {
|
||||
codeforces = {
|
||||
enabled_languages = { 'python' },
|
||||
default_language = 'python',
|
||||
},
|
||||
atcoder = {
|
||||
enabled_languages = { 'python' },
|
||||
default_language = 'python',
|
||||
},
|
||||
cses = {
|
||||
enabled_languages = { 'python' },
|
||||
default_language = 'python',
|
||||
},
|
||||
},
|
||||
open_url = true,
|
||||
ui = {
|
||||
picker = 'fzf-lua',
|
||||
},
|
||||
}
|
||||
end,
|
||||
config = function()
|
||||
local function open_url(url)
|
||||
local ok_ui_open, opened = pcall(vim.ui.open, url)
|
||||
if ok_ui_open and opened ~= false then
|
||||
return
|
||||
end
|
||||
|
||||
local opener = nil
|
||||
if vim.fn.has('macunix') == 1 then
|
||||
opener = 'open'
|
||||
elseif vim.fn.has('unix') == 1 then
|
||||
opener = 'xdg-open'
|
||||
end
|
||||
|
||||
if opener then
|
||||
vim.fn.jobstart({ opener, url }, { detach = true })
|
||||
end
|
||||
end
|
||||
|
||||
local function open_current_cp_problem_url()
|
||||
local ok_state, state = pcall(require, 'cp.state')
|
||||
local ok_cache, cache = pcall(require, 'cp.cache')
|
||||
if not (ok_state and ok_cache) then
|
||||
return
|
||||
end
|
||||
|
||||
local platform = state.get_platform()
|
||||
local contest_id = state.get_contest_id()
|
||||
local problem_id = state.get_problem_id()
|
||||
if not (platform and contest_id and problem_id) then
|
||||
return
|
||||
end
|
||||
|
||||
cache.load()
|
||||
local contest = cache.get_contest_data(platform, contest_id)
|
||||
if contest and contest.url then
|
||||
open_url(contest.url:format(problem_id))
|
||||
end
|
||||
end
|
||||
|
||||
-- cp.nvim only opens URLs when first entering a contest; extend this locally for next/prev.
|
||||
local ok_setup, setup = pcall(require, 'cp.setup')
|
||||
local ok_config, cp_config = pcall(require, 'cp.config')
|
||||
if ok_setup and ok_config and not setup._url_open_patch_applied then
|
||||
local original_navigate_problem = setup.navigate_problem
|
||||
setup.navigate_problem = function(direction, language)
|
||||
local ok_state, state = pcall(require, 'cp.state')
|
||||
local old_problem_id = ok_state and state.get_problem_id() or nil
|
||||
original_navigate_problem(direction, language)
|
||||
|
||||
local cfg = cp_config.get_config()
|
||||
local new_problem_id = ok_state and state.get_problem_id() or nil
|
||||
local moved = old_problem_id ~= nil and new_problem_id ~= nil and old_problem_id ~= new_problem_id
|
||||
if cfg and cfg.open_url and moved then
|
||||
vim.schedule(open_current_cp_problem_url)
|
||||
end
|
||||
end
|
||||
setup._url_open_patch_applied = true
|
||||
end
|
||||
|
||||
map('n', '<leader>cr', '<cmd>CP run<cr>', { desc = 'CP run' })
|
||||
map('n', '<leader>cp', '<cmd>CP panel<cr>', { desc = 'CP panel' })
|
||||
map('n', '<leader>ce', '<cmd>CP edit<cr>', { desc = 'CP edit tests' })
|
||||
map('n', '<leader>cn', '<cmd>CP next<cr>', { desc = 'CP next problem' })
|
||||
map('n', '<leader>cN', '<cmd>CP prev<cr>', { desc = 'CP previous problem' })
|
||||
map('n', '<leader>cc', '<cmd>CP pick<cr>', { desc = 'CP contest picker' })
|
||||
map('n', '<leader>ci', '<cmd>CP interact<cr>', { desc = 'CP interact' })
|
||||
map('n', '<leader>co', open_current_cp_problem_url, { desc = 'CP open problem url' })
|
||||
end,
|
||||
},
|
||||
{
|
||||
'barrettruth/pending.nvim',
|
||||
init = function()
|
||||
map('n', '<leader>p', '<cmd>Pending<cr><cmd>only<cr>')
|
||||
end,
|
||||
},
|
||||
{
|
||||
'barrettruth/preview.nvim',
|
||||
init = function()
|
||||
vim.g.preview = {
|
||||
typst = true,
|
||||
latex = true,
|
||||
github = {
|
||||
output = function(ctx)
|
||||
return '/tmp/' .. vim.fn.fnamemodify(ctx.file, ':t:r') .. '.html'
|
||||
end,
|
||||
{
|
||||
"windwp/nvim-autopairs",
|
||||
event = "InsertEnter",
|
||||
after = function() require("nvim-autopairs").setup() end,
|
||||
},
|
||||
{
|
||||
"folke/flash.nvim",
|
||||
after = function()
|
||||
require("flash").setup {
|
||||
modes = { search = { enabled = true } },
|
||||
}
|
||||
end,
|
||||
keys = {
|
||||
{
|
||||
"s",
|
||||
function() require("flash").jump() end,
|
||||
mode = { "n", "x", "o" },
|
||||
},
|
||||
mermaid = true,
|
||||
}
|
||||
end,
|
||||
},
|
||||
{
|
||||
"S",
|
||||
function() require("flash").treesitter() end,
|
||||
mode = { "n", "x", "o" },
|
||||
},
|
||||
{
|
||||
"r",
|
||||
function() require("flash").remote() end,
|
||||
mode = "o",
|
||||
},
|
||||
{
|
||||
"R",
|
||||
function() require("flash").treesitter_search() end,
|
||||
mode = { "o", "x" },
|
||||
},
|
||||
{
|
||||
"<c-s>",
|
||||
function() require("flash").toggle() end,
|
||||
mode = "c",
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
"kylechui/nvim-surround",
|
||||
after = function() require("nvim-surround").setup() end,
|
||||
keys = {
|
||||
{ "cs", mode = "n" },
|
||||
{ "ds", mode = "n" },
|
||||
{ "ys", mode = "n" },
|
||||
{ "yS", mode = "n" },
|
||||
{ "yss", mode = "n" },
|
||||
{ "ySs", mode = "n" },
|
||||
},
|
||||
},
|
||||
{
|
||||
"kevinhwang91/nvim-ufo",
|
||||
event = "BufReadPost",
|
||||
before = function() vim.cmd.packadd "promise-async" end,
|
||||
after = function()
|
||||
require("ufo").setup {
|
||||
provider_selector = function() return { "treesitter", "indent" } end,
|
||||
}
|
||||
end,
|
||||
keys = {
|
||||
{
|
||||
"zR",
|
||||
function() require("ufo").openAllFolds() end,
|
||||
mode = "n",
|
||||
},
|
||||
{
|
||||
"zM",
|
||||
function() require("ufo").closeAllFolds() end,
|
||||
mode = "n",
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
"barrettruth/pending.nvim",
|
||||
cmd = "Pending",
|
||||
keys = {
|
||||
{ "<leader>p", "<cmd>Pending<cr><cmd>only<cr>" },
|
||||
},
|
||||
},
|
||||
{
|
||||
"barrettruth/preview.nvim",
|
||||
cmd = "Preview",
|
||||
ft = { "markdown", "tex", "typst" },
|
||||
before = function()
|
||||
vim.g.preview = {
|
||||
typst = true,
|
||||
latex = true,
|
||||
github = {
|
||||
output = function(ctx) return "/tmp/" .. vim.fn.fnamemodify(ctx.file, ":t:r") .. ".html" end,
|
||||
},
|
||||
mermaid = true,
|
||||
}
|
||||
end,
|
||||
},
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,3 +1,7 @@
|
|||
vim.pack.add({
|
||||
"https://github.com/ibhagwan/fzf-lua",
|
||||
}, { load = function() end })
|
||||
|
||||
---@param kind 'issue'|'pr'
|
||||
---@param state 'all'|'open'|'closed'
|
||||
local function gh_picker(kind, state)
|
||||
|
|
@ -5,8 +9,10 @@ local function gh_picker(kind, state)
|
|||
vim.notify("gh CLI not found", vim.log.levels.WARN)
|
||||
return
|
||||
end
|
||||
|
||||
local next_state = ({ all = "open", open = "closed", closed = "all" })[state]
|
||||
local label = kind == "pr" and "PRs" or "Issues"
|
||||
|
||||
require("fzf-lua").fzf_exec(("gh %s list --limit 100 --state %s"):format(kind, state), {
|
||||
prompt = ("%s (%s)> "):format(label, state),
|
||||
header = ":: <c-o> to toggle all/open/closed",
|
||||
|
|
@ -22,9 +28,27 @@ end
|
|||
|
||||
return {
|
||||
"ibhagwan/fzf-lua",
|
||||
dependencies = { "nvim-tree/nvim-web-devicons" },
|
||||
config = function(_, opts)
|
||||
cmd = "FzfLua",
|
||||
before = function()
|
||||
pcall(vim.cmd.packadd, "nvim-web-devicons")
|
||||
pcall(vim.cmd.packadd, "nonicons.nvim")
|
||||
end,
|
||||
after = function()
|
||||
local fzf = require "fzf-lua"
|
||||
local opts = {
|
||||
"default-title",
|
||||
winopts = {
|
||||
border = "single",
|
||||
preview = {
|
||||
layout = "vertical",
|
||||
vertical = "down:50%",
|
||||
},
|
||||
},
|
||||
fzf_opts = {
|
||||
["--layout"] = "reverse",
|
||||
},
|
||||
}
|
||||
|
||||
fzf.setup(opts)
|
||||
|
||||
local ok, fzf_reload = pcall(require, "config.fzf_reload")
|
||||
|
|
@ -32,45 +56,43 @@ return {
|
|||
fzf_reload.setup(opts)
|
||||
fzf_reload.reload()
|
||||
end
|
||||
|
||||
map("n", "<C-f>", function()
|
||||
local git_dir = vim.fn.system("git rev-parse --git-dir 2>/dev/null"):gsub("\n", "")
|
||||
if vim.v.shell_error == 0 and git_dir ~= "" then
|
||||
fzf.git_files()
|
||||
else
|
||||
fzf.files()
|
||||
end
|
||||
end)
|
||||
map("n", "<leader>ff", "<cmd>FzfLua files<cr>")
|
||||
map("n", "<leader>fg", "<cmd>FzfLua live_grep<cr>")
|
||||
map("n", "<leader>fb", "<cmd>FzfLua buffers<cr>")
|
||||
map("n", "<leader>fh", "<cmd>FzfLua help_tags<cr>")
|
||||
map("n", "<leader>fr", "<cmd>FzfLua resume<cr>")
|
||||
map("n", "<leader>fo", "<cmd>FzfLua oldfiles<cr>")
|
||||
map("n", "<leader>fc", "<cmd>FzfLua commands<cr>")
|
||||
map("n", "<leader>fk", "<cmd>FzfLua keymaps<cr>")
|
||||
map("n", "<leader>f/", "<cmd>FzfLua search_history<cr>")
|
||||
map("n", "<leader>f:", "<cmd>FzfLua command_history<cr>")
|
||||
map("n", "<leader>fe", "<cmd>FzfLua files cwd=~/.config<cr>")
|
||||
map("n", "gq", "<cmd>FzfLua quickfix<cr>")
|
||||
map("n", "gl", "<cmd>FzfLua loclist<cr>")
|
||||
map("n", "<leader>GB", "<cmd>FzfLua git_branches<cr>")
|
||||
map("n", "<leader>Gc", "<cmd>FzfLua git_commits<cr>")
|
||||
map("n", "<leader>Gs", "<cmd>FzfLua git_status<cr>")
|
||||
map("n", "<leader>Gp", function() gh_picker("pr", "open") end)
|
||||
map("n", "<leader>Gi", function() gh_picker("issue", "open") end)
|
||||
end,
|
||||
opts = {
|
||||
"default-title",
|
||||
winopts = {
|
||||
border = "single",
|
||||
preview = {
|
||||
layout = "vertical",
|
||||
vertical = "down:50%",
|
||||
},
|
||||
keys = {
|
||||
{
|
||||
"<C-f>",
|
||||
function()
|
||||
local fzf = require "fzf-lua"
|
||||
local git_dir = vim.fn.system("git rev-parse --git-dir 2>/dev/null"):gsub("\n", "")
|
||||
if vim.v.shell_error == 0 and git_dir ~= "" then
|
||||
fzf.git_files()
|
||||
else
|
||||
fzf.files()
|
||||
end
|
||||
end,
|
||||
},
|
||||
fzf_opts = {
|
||||
["--layout"] = "reverse",
|
||||
{ "<leader>ff", "<cmd>FzfLua files<cr>" },
|
||||
{ "<leader>fg", "<cmd>FzfLua live_grep<cr>" },
|
||||
{ "<leader>fb", "<cmd>FzfLua buffers<cr>" },
|
||||
{ "<leader>fh", "<cmd>FzfLua help_tags<cr>" },
|
||||
{ "<leader>fr", "<cmd>FzfLua resume<cr>" },
|
||||
{ "<leader>fo", "<cmd>FzfLua oldfiles<cr>" },
|
||||
{ "<leader>fc", "<cmd>FzfLua commands<cr>" },
|
||||
{ "<leader>fk", "<cmd>FzfLua keymaps<cr>" },
|
||||
{ "<leader>f/", "<cmd>FzfLua search_history<cr>" },
|
||||
{ "<leader>f:", "<cmd>FzfLua command_history<cr>" },
|
||||
{ "<leader>fe", "<cmd>FzfLua files cwd=~/.config<cr>" },
|
||||
{ "gq", "<cmd>FzfLua quickfix<cr>" },
|
||||
{ "gl", "<cmd>FzfLua loclist<cr>" },
|
||||
{ "<leader>GB", "<cmd>FzfLua git_branches<cr>" },
|
||||
{ "<leader>Gc", "<cmd>FzfLua git_commits<cr>" },
|
||||
{ "<leader>Gs", "<cmd>FzfLua git_status<cr>" },
|
||||
{
|
||||
"<leader>Gp",
|
||||
function() gh_picker("pr", "open") end,
|
||||
},
|
||||
{
|
||||
"<leader>Gi",
|
||||
function() gh_picker("issue", "open") end,
|
||||
},
|
||||
},
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,102 +1,68 @@
|
|||
local function file_loc()
|
||||
local root = vim.trim(vim.fn.system('git rev-parse --show-toplevel'))
|
||||
if vim.v.shell_error ~= 0 or root == '' then
|
||||
return nil
|
||||
end
|
||||
local path = vim.api.nvim_buf_get_name(0)
|
||||
if path == '' or path:sub(1, #root + 1) ~= root .. '/' then
|
||||
return nil
|
||||
end
|
||||
return ('%s:%d'):format(path:sub(#root + 2), vim.fn.line('.'))
|
||||
end
|
||||
|
||||
local function gh_browse()
|
||||
if vim.fn.executable('gh') ~= 1 then
|
||||
vim.notify('gh CLI not found', vim.log.levels.WARN)
|
||||
return
|
||||
end
|
||||
local loc = file_loc()
|
||||
if loc then
|
||||
vim.system({ 'gh', 'browse', loc })
|
||||
else
|
||||
vim.system({ 'gh', 'browse' })
|
||||
end
|
||||
end
|
||||
vim.pack.add({
|
||||
"https://github.com/lewis6991/gitsigns.nvim",
|
||||
"https://github.com/barrettruth/forge.nvim",
|
||||
"https://github.com/barrettruth/diffs.nvim",
|
||||
}, { load = function() end })
|
||||
|
||||
return {
|
||||
{
|
||||
'tpope/vim-fugitive',
|
||||
config = function()
|
||||
map('n', '<leader>gg', '<cmd>Git<cr><cmd>only<cr>')
|
||||
map('n', '<leader>gc', '<cmd>Git commit<cr>')
|
||||
map('n', '<leader>gp', '<cmd>Git push<cr>')
|
||||
map('n', '<leader>gl', '<cmd>Git pull<cr>')
|
||||
map('n', '<leader>gb', '<cmd>Git blame<cr>')
|
||||
map('n', '<leader>gd', '<cmd>Gvdiffsplit<cr>')
|
||||
map('n', '<leader>gr', '<cmd>Gread<cr>')
|
||||
map('n', '<leader>gw', '<cmd>Gwrite<cr>')
|
||||
map({ 'n', 'v' }, '<leader>go', gh_browse)
|
||||
end,
|
||||
},
|
||||
{
|
||||
'lewis6991/gitsigns.nvim',
|
||||
opts = {
|
||||
signs = {
|
||||
add = { text = '██' },
|
||||
change = { text = '██' },
|
||||
delete = { text = '▄▄' },
|
||||
topdelete = { text = '▀▀' },
|
||||
changedelete = { text = '██' },
|
||||
},
|
||||
signs_staged = {
|
||||
add = { text = '▓▓' },
|
||||
change = { text = '▓▓' },
|
||||
delete = { text = '▄▄' },
|
||||
topdelete = { text = '▀▀' },
|
||||
changedelete = { text = '▓▓' },
|
||||
},
|
||||
signs_staged_enable = true,
|
||||
{
|
||||
"lewis6991/gitsigns.nvim",
|
||||
event = "BufReadPre",
|
||||
after = function()
|
||||
require("gitsigns").setup {
|
||||
signs = {
|
||||
add = { text = "██" },
|
||||
change = { text = "██" },
|
||||
delete = { text = "▄▄" },
|
||||
topdelete = { text = "▀▀" },
|
||||
changedelete = { text = "██" },
|
||||
},
|
||||
config = function(_, opts)
|
||||
require('gitsigns').setup(opts)
|
||||
map('n', ']g', '<cmd>Gitsigns next_hunk<cr>')
|
||||
map('n', '[g', '<cmd>Gitsigns prev_hunk<cr>')
|
||||
map('n', '<leader>ghs', '<cmd>Gitsigns stage_hunk<cr>')
|
||||
map('n', '<leader>ghr', '<cmd>Gitsigns reset_hunk<cr>')
|
||||
map('n', '<leader>ghp', '<cmd>Gitsigns preview_hunk<cr>')
|
||||
map('n', '<leader>gB', '<cmd>Gitsigns toggle_current_line_blame<cr>')
|
||||
end,
|
||||
},
|
||||
{
|
||||
'barrettruth/forge.nvim',
|
||||
dependencies = { 'ibhagwan/fzf-lua' },
|
||||
init = function()
|
||||
vim.g.forge = vim.g.forge or {}
|
||||
end,
|
||||
config = function()
|
||||
map('n', '<c-t>', '<cmd>Forge<cr>', { desc = 'Forge picker' })
|
||||
end,
|
||||
},
|
||||
{
|
||||
'barrettruth/diffs.nvim',
|
||||
enabled = true,
|
||||
init = function()
|
||||
vim.g.diffs = {
|
||||
integrations = {
|
||||
fugitive = {
|
||||
enabled = true,
|
||||
horizontal = false,
|
||||
vertical = false,
|
||||
},
|
||||
},
|
||||
hide_prefix = true,
|
||||
highlights = {
|
||||
warn_max_lines = false,
|
||||
gutter = true,
|
||||
blend_alpha = 0.5,
|
||||
intra = { enabled = true },
|
||||
},
|
||||
}
|
||||
end,
|
||||
signs_staged = {
|
||||
add = { text = "▓▓" },
|
||||
change = { text = "▓▓" },
|
||||
delete = { text = "▄▄" },
|
||||
topdelete = { text = "▀▀" },
|
||||
changedelete = { text = "▓▓" },
|
||||
},
|
||||
signs_staged_enable = true,
|
||||
}
|
||||
|
||||
map("n", "]g", "<cmd>Gitsigns next_hunk<cr>")
|
||||
map("n", "[g", "<cmd>Gitsigns prev_hunk<cr>")
|
||||
map("n", "<leader>ghs", "<cmd>Gitsigns stage_hunk<cr>")
|
||||
map("n", "<leader>ghr", "<cmd>Gitsigns reset_hunk<cr>")
|
||||
map("n", "<leader>ghp", "<cmd>Gitsigns preview_hunk<cr>")
|
||||
map("n", "<leader>gB", "<cmd>Gitsigns toggle_current_line_blame<cr>")
|
||||
end,
|
||||
},
|
||||
{
|
||||
"barrettruth/forge.nvim",
|
||||
cmd = "Forge",
|
||||
before = function() vim.g.forge = vim.g.forge or {} end,
|
||||
after = function() pcall(vim.cmd.packadd, "fzf-lua") end,
|
||||
keys = {
|
||||
{ "<c-t>", "<cmd>Forge<cr>", desc = "Forge picker" },
|
||||
},
|
||||
},
|
||||
{
|
||||
"barrettruth/diffs.nvim",
|
||||
before = function()
|
||||
vim.g.diffs = {
|
||||
integrations = {
|
||||
fugitive = {
|
||||
enabled = true,
|
||||
horizontal = false,
|
||||
vertical = false,
|
||||
},
|
||||
},
|
||||
hide_prefix = true,
|
||||
highlights = {
|
||||
warn_max_lines = false,
|
||||
gutter = true,
|
||||
blend_alpha = 0.5,
|
||||
intra = { enabled = true },
|
||||
},
|
||||
}
|
||||
end,
|
||||
},
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,4 +1,9 @@
|
|||
vim.pack.add({
|
||||
"https://github.com/neovim/nvim-lspconfig",
|
||||
}, { load = function() end })
|
||||
|
||||
return {
|
||||
'neovim/nvim-lspconfig',
|
||||
lazy = false,
|
||||
{
|
||||
"neovim/nvim-lspconfig",
|
||||
},
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,87 +1,92 @@
|
|||
vim.pack.add({
|
||||
"https://github.com/barrettruth/canola.nvim",
|
||||
"https://github.com/barrettruth/canola-collection",
|
||||
}, { load = function() end })
|
||||
|
||||
return {
|
||||
{
|
||||
'barrettruth/canola.nvim',
|
||||
branch = 'canola',
|
||||
dependencies = { 'nvim-tree/nvim-web-devicons' },
|
||||
init = function()
|
||||
vim.g.canola = {
|
||||
columns = { 'icon' },
|
||||
delete = { wipe = false, recursive = true },
|
||||
hidden = { enabled = false },
|
||||
keymaps = {
|
||||
['g?'] = { callback = 'actions.show_help', mode = 'n' },
|
||||
['<CR>'] = 'actions.select',
|
||||
['<C-v>'] = { callback = 'actions.select', opts = { vertical = true } },
|
||||
['<C-x>'] = { callback = 'actions.select', opts = { horizontal = true } },
|
||||
['<C-p>'] = 'actions.preview',
|
||||
['<C-c>'] = { callback = 'actions.close', mode = 'n' },
|
||||
['-'] = { callback = 'actions.parent', mode = 'n' },
|
||||
['g.'] = { callback = 'actions.toggle_hidden', mode = 'n' },
|
||||
['<C-t>'] = false,
|
||||
},
|
||||
}
|
||||
map('n', '-', '<cmd>Canola<cr>')
|
||||
map('n', '<leader>e', '<cmd>Canola<cr>')
|
||||
{
|
||||
"barrettruth/canola.nvim",
|
||||
cmd = "Canola",
|
||||
before = function()
|
||||
vim.g.canola = {
|
||||
columns = { "icon" },
|
||||
delete = { wipe = false, recursive = true },
|
||||
hidden = { enabled = false },
|
||||
keymaps = {
|
||||
["g?"] = { callback = "actions.show_help", mode = "n" },
|
||||
["<CR>"] = "actions.select",
|
||||
["<C-v>"] = { callback = "actions.select", opts = { vertical = true } },
|
||||
["<C-x>"] = { callback = "actions.select", opts = { horizontal = true } },
|
||||
["<C-p>"] = "actions.preview",
|
||||
["<C-c>"] = { callback = "actions.close", mode = "n" },
|
||||
["-"] = { callback = "actions.parent", mode = "n" },
|
||||
["g."] = { callback = "actions.toggle_hidden", mode = "n" },
|
||||
["<C-t>"] = false,
|
||||
},
|
||||
}
|
||||
end,
|
||||
after = function()
|
||||
vim.cmd.packadd "canola-collection"
|
||||
|
||||
local ns = vim.api.nvim_create_namespace('canola_git_trailing')
|
||||
local symbols = {
|
||||
M = { 'M', 'DiagnosticWarn' },
|
||||
A = { 'A', 'DiagnosticOk' },
|
||||
D = { 'D', 'DiagnosticError' },
|
||||
R = { 'R', 'DiagnosticWarn' },
|
||||
['?'] = { '?', 'DiagnosticInfo' },
|
||||
['!'] = { '!', 'Comment' },
|
||||
}
|
||||
local ns = vim.api.nvim_create_namespace "canola_git_trailing"
|
||||
local symbols = {
|
||||
M = { "M", "DiagnosticWarn" },
|
||||
A = { "A", "DiagnosticOk" },
|
||||
D = { "D", "DiagnosticError" },
|
||||
R = { "R", "DiagnosticWarn" },
|
||||
["?"] = { "?", "DiagnosticInfo" },
|
||||
["!"] = { "!", "Comment" },
|
||||
}
|
||||
|
||||
local function apply_git_status(buf)
|
||||
if not vim.api.nvim_buf_is_valid(buf) then return end
|
||||
vim.api.nvim_buf_clear_namespace(buf, ns, 0, -1)
|
||||
local function apply_git_status(buf)
|
||||
if not vim.api.nvim_buf_is_valid(buf) then return end
|
||||
vim.api.nvim_buf_clear_namespace(buf, ns, 0, -1)
|
||||
|
||||
local ok, canola = pcall(require, 'canola')
|
||||
if not ok then return end
|
||||
local ok, canola = pcall(require, "canola")
|
||||
if not ok then return end
|
||||
|
||||
local dir = canola.get_current_dir(buf)
|
||||
if not dir then return end
|
||||
local dir = canola.get_current_dir(buf)
|
||||
if not dir then return end
|
||||
|
||||
local git_ok, git = pcall(require, 'canola-git')
|
||||
if not git_ok then return end
|
||||
local git_ok, git = pcall(require, "canola-git")
|
||||
if not git_ok then return end
|
||||
|
||||
local dir_cache = git._cache[dir]
|
||||
if not dir_cache or not dir_cache.status then return end
|
||||
local dir_cache = git._cache[dir]
|
||||
if not dir_cache or not dir_cache.status then return end
|
||||
|
||||
local lines = vim.api.nvim_buf_line_count(buf)
|
||||
for lnum = 0, lines - 1 do
|
||||
local entry = canola.get_entry_on_line(buf, lnum + 1)
|
||||
if entry then
|
||||
local status = dir_cache.status[entry.name]
|
||||
if status then
|
||||
local ch = status:sub(1, 1)
|
||||
if ch == ' ' then ch = status:sub(2, 2) end
|
||||
local sym = symbols[ch]
|
||||
if sym then
|
||||
vim.api.nvim_buf_set_extmark(buf, ns, lnum, 0, {
|
||||
virt_text = { { ' ' .. sym[1], sym[2] } },
|
||||
virt_text_pos = 'eol',
|
||||
invalidate = true,
|
||||
})
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
local lines = vim.api.nvim_buf_line_count(buf)
|
||||
for lnum = 0, lines - 1 do
|
||||
local entry = canola.get_entry_on_line(buf, lnum + 1)
|
||||
if entry then
|
||||
local status = dir_cache.status[entry.name]
|
||||
if status then
|
||||
local ch = status:sub(1, 1)
|
||||
if ch == " " then ch = status:sub(2, 2) end
|
||||
local sym = symbols[ch]
|
||||
if sym then
|
||||
vim.api.nvim_buf_set_extmark(buf, ns, lnum, 0, {
|
||||
virt_text = { { " " .. sym[1], sym[2] } },
|
||||
virt_text_pos = "eol",
|
||||
invalidate = true,
|
||||
})
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
vim.api.nvim_create_autocmd('User', {
|
||||
pattern = 'CanolaReadPost',
|
||||
callback = function(args)
|
||||
local buf = args.buf
|
||||
apply_git_status(buf)
|
||||
vim.defer_fn(function() apply_git_status(buf) end, 500)
|
||||
end,
|
||||
})
|
||||
vim.api.nvim_create_autocmd("User", {
|
||||
pattern = "CanolaReadPost",
|
||||
callback = function(args)
|
||||
local buf = args.buf
|
||||
apply_git_status(buf)
|
||||
vim.defer_fn(function() apply_git_status(buf) end, 500)
|
||||
end,
|
||||
})
|
||||
end,
|
||||
keys = {
|
||||
{ "-", "<cmd>Canola<cr>" },
|
||||
{ "<leader>e", "<cmd>Canola<cr>" },
|
||||
},
|
||||
{
|
||||
'barrettruth/canola-collection',
|
||||
dependencies = { 'barrettruth/canola.nvim' },
|
||||
},
|
||||
},
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,56 +1,71 @@
|
|||
vim.pack.add({
|
||||
"https://github.com/nvim-treesitter/nvim-treesitter",
|
||||
"https://github.com/nvim-treesitter/nvim-treesitter-textobjects",
|
||||
}, { load = function() end })
|
||||
|
||||
vim.api.nvim_create_autocmd("PackChanged", {
|
||||
callback = function(ev)
|
||||
local name, kind = ev.data.spec.name, ev.data.kind
|
||||
if kind == "delete" then return end
|
||||
if name == "nvim-treesitter" then vim.schedule(function() vim.cmd "TSUpdate all" end) end
|
||||
end,
|
||||
})
|
||||
|
||||
return {
|
||||
{
|
||||
'nvim-treesitter/nvim-treesitter',
|
||||
build = ':TSUpdate',
|
||||
dependencies = { 'nvim-treesitter/nvim-treesitter-textobjects' },
|
||||
config = function()
|
||||
require('nvim-treesitter-textobjects').setup({
|
||||
select = {
|
||||
enable = true,
|
||||
lookahead = true,
|
||||
keymaps = {
|
||||
['af'] = '@function.outer',
|
||||
['if'] = '@function.inner',
|
||||
['ac'] = '@class.outer',
|
||||
['ic'] = '@class.inner',
|
||||
['aa'] = '@parameter.outer',
|
||||
['ia'] = '@parameter.inner',
|
||||
['ai'] = '@conditional.outer',
|
||||
['ii'] = '@conditional.inner',
|
||||
['al'] = '@loop.outer',
|
||||
['il'] = '@loop.inner',
|
||||
['ab'] = '@block.outer',
|
||||
['ib'] = '@block.inner',
|
||||
},
|
||||
},
|
||||
move = {
|
||||
enable = true,
|
||||
set_jumps = true,
|
||||
goto_next_start = {
|
||||
[']f'] = '@function.outer',
|
||||
[']c'] = '@class.outer',
|
||||
[']a'] = '@parameter.inner',
|
||||
},
|
||||
goto_next_end = {
|
||||
[']F'] = '@function.outer',
|
||||
[']C'] = '@class.outer',
|
||||
},
|
||||
goto_previous_start = {
|
||||
['[f'] = '@function.outer',
|
||||
['[c'] = '@class.outer',
|
||||
['[a'] = '@parameter.inner',
|
||||
},
|
||||
goto_previous_end = {
|
||||
['[F'] = '@function.outer',
|
||||
['[C'] = '@class.outer',
|
||||
},
|
||||
},
|
||||
swap = {
|
||||
enable = true,
|
||||
swap_next = { ['<leader>sn'] = '@parameter.inner' },
|
||||
swap_previous = { ['<leader>sp'] = '@parameter.inner' },
|
||||
},
|
||||
})
|
||||
end,
|
||||
},
|
||||
{
|
||||
"nvim-treesitter/nvim-treesitter",
|
||||
after = function() require("nvim-treesitter").setup { auto_install = true } end,
|
||||
},
|
||||
{
|
||||
"nvim-treesitter/nvim-treesitter-textobjects",
|
||||
after = function()
|
||||
require("nvim-treesitter-textobjects").setup {
|
||||
select = {
|
||||
enable = true,
|
||||
lookahead = true,
|
||||
keymaps = {
|
||||
["af"] = "@function.outer",
|
||||
["if"] = "@function.inner",
|
||||
["ac"] = "@class.outer",
|
||||
["ic"] = "@class.inner",
|
||||
["aa"] = "@parameter.outer",
|
||||
["ia"] = "@parameter.inner",
|
||||
["ai"] = "@conditional.outer",
|
||||
["ii"] = "@conditional.inner",
|
||||
["al"] = "@loop.outer",
|
||||
["il"] = "@loop.inner",
|
||||
["ab"] = "@block.outer",
|
||||
["ib"] = "@block.inner",
|
||||
},
|
||||
},
|
||||
move = {
|
||||
enable = true,
|
||||
set_jumps = true,
|
||||
goto_next_start = {
|
||||
["]f"] = "@function.outer",
|
||||
["]c"] = "@class.outer",
|
||||
["]a"] = "@parameter.inner",
|
||||
},
|
||||
goto_next_end = {
|
||||
["]F"] = "@function.outer",
|
||||
["]C"] = "@class.outer",
|
||||
},
|
||||
goto_previous_start = {
|
||||
["[f"] = "@function.outer",
|
||||
["[c"] = "@class.outer",
|
||||
["[a"] = "@parameter.inner",
|
||||
},
|
||||
goto_previous_end = {
|
||||
["[F"] = "@function.outer",
|
||||
["[C"] = "@class.outer",
|
||||
},
|
||||
},
|
||||
swap = {
|
||||
enable = true,
|
||||
swap_next = { ["<leader>sn"] = "@parameter.inner" },
|
||||
swap_previous = { ["<leader>sp"] = "@parameter.inner" },
|
||||
},
|
||||
}
|
||||
end,
|
||||
},
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,15 +1,29 @@
|
|||
vim.pack.add({
|
||||
"https://github.com/harivansh-afk/cozybox.nvim",
|
||||
"https://github.com/nvim-lualine/lualine.nvim",
|
||||
"https://github.com/barrettruth/nonicons.nvim",
|
||||
"https://github.com/nvim-tree/nvim-web-devicons",
|
||||
}, { load = function() end })
|
||||
|
||||
return {
|
||||
{
|
||||
"harivansh-afk/cozybox.nvim",
|
||||
lazy = false,
|
||||
priority = 1000,
|
||||
config = function() require("theme").setup() end,
|
||||
after = function() require("theme").setup() end,
|
||||
},
|
||||
{
|
||||
"nvim-tree/nvim-web-devicons",
|
||||
},
|
||||
{
|
||||
"barrettruth/nonicons.nvim",
|
||||
before = function() vim.cmd.packadd "nvim-web-devicons" end,
|
||||
},
|
||||
{
|
||||
"nvim-lualine/lualine.nvim",
|
||||
dependencies = { "nvim-tree/nvim-web-devicons" },
|
||||
config = function()
|
||||
local theme_status = function() return require("theme").statusline_label() end
|
||||
before = function()
|
||||
vim.cmd.packadd "nvim-web-devicons"
|
||||
pcall(vim.cmd.packadd, "nonicons.nvim")
|
||||
end,
|
||||
after = function()
|
||||
local theme = {
|
||||
normal = {
|
||||
a = { gui = "bold" },
|
||||
|
|
@ -24,6 +38,7 @@ return {
|
|||
a = { gui = "bold" },
|
||||
},
|
||||
}
|
||||
|
||||
require("lualine").setup {
|
||||
options = {
|
||||
icons_enabled = false,
|
||||
|
|
@ -42,8 +57,4 @@ return {
|
|||
}
|
||||
end,
|
||||
},
|
||||
{
|
||||
"barrettruth/nonicons.nvim",
|
||||
dependencies = { "nvim-tree/nvim-web-devicons" },
|
||||
},
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue