who knows

This commit is contained in:
Christian Nieves
2025-01-27 20:49:29 +00:00
parent 5e739703d0
commit 1bbcef640d
3 changed files with 330 additions and 349 deletions

View File

@ -2,170 +2,152 @@ local use_google = require("utils").use_google
local flags = require("utils").flags local flags = require("utils").flags
return { return {
{ {
"saghen/blink.compat", "saghen/blink.compat",
-- use the latest release, via version = '*', if you also use the latest release for blink.cmp -- use the latest release, via version = '*', if you also use the latest release for blink.cmp
version = "*", version = "*",
-- lazy.nvim will automatically load the plugin when it's required by blink.cmp -- lazy.nvim will automatically load the plugin when it's required by blink.cmp
lazy = true, lazy = true,
cond = flags.blink, cond = flags.blink,
-- make sure to set opts so that lazy.nvim calls blink.compat's setup -- make sure to set opts so that lazy.nvim calls blink.compat's setup
opts = { opts = {
impersonate_nvim_cmp = true, impersonate_nvim_cmp = true,
debug = true, debug = true,
}, },
}, },
{ {
"saghen/blink.cmp", "saghen/blink.cmp",
lazy = false, -- lazy loading handled internally lazy = false, -- lazy loading handled internally
cond = flags.blink, cond = flags.blink,
dependencies = { dependencies = {
"Exafunction/codeium.nvim", "Exafunction/codeium.nvim",
"chrisgrieser/cmp-nerdfont", "chrisgrieser/cmp-nerdfont",
"hrsh7th/cmp-nvim-lsp", "hrsh7th/cmp-nvim-lsp",
"mikavilpas/blink-ripgrep.nvim", "mikavilpas/blink-ripgrep.nvim",
"moyiz/blink-emoji.nvim", "moyiz/blink-emoji.nvim",
"rafamadriz/friendly-snippets", -- optional: provides snippets for the snippet source "rafamadriz/friendly-snippets", -- optional: provides snippets for the snippet source
"saghen/blink.compat", "saghen/blink.compat",
}, },
version = "v0.*", -- use a release tag to download pre-built binaries version = "v0.*", -- use a release tag to download pre-built binaries
-- build = 'cargo build --release', -- build = 'cargo build --release',
---@module 'blink.cmp' ---@module 'blink.cmp'
---@type blink.cmp.Config ---@type blink.cmp.Config
opts = { opts = {
-- stylua: ignore -- stylua: ignore
keymap = { keymap = {
preset = "none", preset = "none",
["<C-space>"] = { "show", "show_documentation", "hide_documentation" }, ["<C-space>"] = { "show", "show_documentation", "hide_documentation" },
["<C-e>"] = { "hide", "fallback" }, ["<C-e>"] = { "hide", "fallback" },
["<CR>"] = { "accept", "fallback" }, ["<CR>"] = { "accept", "fallback" },
["<Tab>"] = { "select_next", "snippet_forward", "accept", "fallback" }, ["<Tab>"] = { "select_next", "snippet_forward", "accept", "fallback" },
["<S-Tab>"] = { "select_prev", "snippet_backward", "fallback" }, ["<S-Tab>"] = { "select_prev", "snippet_backward", "fallback" },
["<Up>"] = { "select_prev", "fallback" }, ["<Up>"] = { "select_prev", "fallback" },
["<Down>"] = { "select_next", "fallback" }, ["<Down>"] = { "select_next", "fallback" },
["<S-Up>"] = { "scroll_documentation_up", "fallback" }, ["<S-Up>"] = { "scroll_documentation_up", "fallback" },
["<S-Down>"] = { "scroll_documentation_down", "fallback" }, ["<S-Down>"] = { "scroll_documentation_down", "fallback" },
}, },
sources = { sources = {
default = function(ctx) default = function(ctx)
local providerToEnable = { local providerToEnable = {
"lsp", "lsp",
"path", "path",
"snippets", "snippets",
"ripgrep", "ripgrep",
"emoji", "emoji",
"nerdfont", "nerdfont",
"buffer", "buffer",
} }
if use_google() then if use_google() then
table.insert(providerToEnable, "nvim_ciderlsp") table.insert(providerToEnable, "nvim_ciderlsp")
table.insert(providerToEnable, "buganizer") table.insert(providerToEnable, "buganizer")
else else
table.insert(providerToEnable, "codeium") table.insert(providerToEnable, "codeium")
end end
return providerToEnable return providerToEnable
end, end,
-- default = { "lsp" }, -- default = { "lsp" },
providers = { providers = {
lsp = { name = "LSP", module = "blink.cmp.sources.lsp", score_offset = 90 }, lsp = { name = "LSP", module = "blink.cmp.sources.lsp", score_offset = 90 },
-- dont show LuaLS require statements when lazydev has items -- dont show LuaLS require statements when lazydev has items
lazydev = { name = "LazyDev", module = "lazydev.integrations.blink", fallbacks = { "lsp" } }, lazydev = { name = "LazyDev", module = "lazydev.integrations.blink", fallbacks = { "lsp" } },
ripgrep = { ripgrep = {
module = "blink-ripgrep", module = "blink-ripgrep",
name = "Ripgrep", name = "Ripgrep",
-- the options below are optional, some default values are shown -- the options below are optional, some default values are shown
---@module "blink-ripgrep" ---@module "blink-ripgrep"
---@type blink-ripgrep.Options ---@type blink-ripgrep.Options
opts = { opts = {
prefix_min_len = 3, prefix_min_len = 3,
context_size = 5, context_size = 5,
max_filesize = "1M", max_filesize = "1M",
additional_rg_options = {}, additional_rg_options = {},
}, },
}, },
-- https://github.com/moyiz/blink-emoji.nvim -- https://github.com/moyiz/blink-emoji.nvim
emoji = { emoji = {
module = "blink-emoji", module = "blink-emoji",
name = "Emoji", name = "Emoji",
score_offset = 15, -- the higher the number, the higher the priority score_offset = 15, -- the higher the number, the higher the priority
opts = { insert = true }, -- Insert emoji (default) or complete its name opts = { insert = true }, -- Insert emoji (default) or complete its name
}, },
buffer = { buffer = {
name = "Buffer", name = "Buffer",
enabled = true, enabled = true,
max_items = 3, max_items = 3,
module = "blink.cmp.sources.buffer", module = "blink.cmp.sources.buffer",
min_keyword_length = 4, min_keyword_length = 4,
score_offset = 15, -- the higher the number, the higher the priority score_offset = 15, -- the higher the number, the higher the priority
}, },
-- compat sources -- compat sources
nerdfont = { nerdfont = {
name = "nerdfont", name = "nerdfont",
module = "blink.compat.source", module = "blink.compat.source",
}, },
codeium = { codeium = {
name = "codeium", name = "codeium",
module = "blink.compat.source", module = "blink.compat.source",
score_offset = 100, score_offset = 100,
}, },
nvim_ciderlsp = { nvim_ciderlsp = {
name = "nvim_ciderlsp", name = "nvim_ciderlsp",
module = "blink.compat.source", module = "blink.compat.source",
score_offset = 100, score_offset = 100,
}, },
buganizer = { buganizer = {
name = "nvim_buganizer", name = "nvim_buganizer",
module = "blink.compat.source", module = "blink.compat.source",
}, },
}, },
}, },
-- experimental signature help support -- experimental signature help support
signature = { enabled = true }, signature = { enabled = true },
completion = { completion = {
list = { list = {
-- stylua: ignore -- stylua: ignore
selection = { selection = {
preselect = function(ctx) return ctx.mode ~= 'cmdline' end, preselect = function(ctx) return ctx.mode ~= 'cmdline' end,
auto_insert = function(ctx) return ctx.mode ~= 'cmdline' end, auto_insert = function(ctx) return ctx.mode ~= 'cmdline' end,
}, },
}, },
documentation = { documentation = {
auto_show = true, auto_show = true,
}, },
-- Displays a preview of the selected item on the current line -- Displays a preview of the selected item on the current line
ghost_text = { ghost_text = {
enabled = true, enabled = true,
}, },
menu = { trigger = {
draw = { show_on_x_blocked_trigger_characters = { "'", '"', "(", "{" },
components = { },
kind_icon = { },
ellipsis = false, },
text = function(ctx)
local kind_icon, _, _ = require("mini.icons").get("lsp", ctx.kind)
return kind_icon
end,
-- Optionally, you may also use the highlights from mini.icons
highlight = function(ctx)
local _, hl, _ = require("mini.icons").get("lsp", ctx.kind)
return hl
end,
},
},
},
},
trigger = {
show_on_x_blocked_trigger_characters = { "'", '"', "(", "{" },
},
},
},
-- allows extending the providers array elsewhere in your config -- allows extending the providers array elsewhere in your config
-- without having to redefine it -- without having to redefine it
opts_extend = { "sources.default" }, opts_extend = { "sources.default" },
}, },
} }

View File

@ -1,129 +1,128 @@
return { return {
"williamboman/mason-lspconfig.nvim", "williamboman/mason-lspconfig.nvim",
cond = false, dependencies = {
dependencies = { "williamboman/mason.nvim",
"williamboman/mason.nvim", "Hoffs/omnisharp-extended-lsp.nvim",
"Hoffs/omnisharp-extended-lsp.nvim", },
}, config = function()
config = function() local TableConcat = require("utils").TableConcat
local TableConcat = require("utils").TableConcat local use_google = require("utils").use_google
local use_google = require("utils").use_google
local lsps = { local lsps = {
"lua_ls", "lua_ls",
"html", "html",
"marksman", "marksman",
"sqlls", "sqlls",
"bashls", "bashls",
"dotls", "dotls",
"golangci_lint_ls", "golangci_lint_ls",
"gopls", "gopls",
} }
if not use_google() then if not use_google() then
TableConcat(lsps, { TableConcat(lsps, {
"pyright", "pyright",
"omnisharp_mono", "omnisharp_mono",
"docker_compose_language_service", "docker_compose_language_service",
"dockerls", "dockerls",
"graphql", "graphql",
"kotlin_language_server", "kotlin_language_server",
"arduino_language_server", "arduino_language_server",
"clangd", "clangd",
}) })
end end
require("mason").setup() require("mason").setup()
require("mason-lspconfig").setup({ require("mason-lspconfig").setup({
automatic_installation = false, automatic_installation = false,
ensure_installed = lsps, ensure_installed = lsps,
handlers = { handlers = {
-- The first entry (without a key) will be the default handler -- The first entry (without a key) will be the default handler
-- and will be called for each installed server that doesn't have -- and will be called for each installed server that doesn't have
-- a dedicated handler. -- a dedicated handler.
function(server_name) -- default handler (optional) function(server_name) -- default handler (optional)
-- vim.notify("Mason LSP:" .. server_name) -- vim.notify("Mason LSP:" .. server_name)
require("lspconfig")[server_name].setup({}) require("lspconfig")[server_name].setup({})
end, end,
-- Prevent mason from setting up rust_analyzer since that's handled by rustaceanvim -- Prevent mason from setting up rust_analyzer since that's handled by rustaceanvim
["rust_analyzer"] = function() end, ["rust_analyzer"] = function() end,
["omnisharp_mono"] = function() ["omnisharp_mono"] = function()
require("lspconfig").omnisharp_mono.setup({ require("lspconfig").omnisharp_mono.setup({
handlers = { handlers = {
["textDocument/definition"] = require("omnisharp_extended").handler, ["textDocument/definition"] = require("omnisharp_extended").handler,
}, },
-- cmd = { "dotnet", "/path/to/omnisharp/OmniSharp.dll" }, -- cmd = { "dotnet", "/path/to/omnisharp/OmniSharp.dll" },
-- Enables support for reading code style, naming convention and analyzer -- Enables support for reading code style, naming convention and analyzer
-- settings from .editorconfig. -- settings from .editorconfig.
enable_editorconfig_support = true, enable_editorconfig_support = true,
-- If true, MSBuild project system will only load projects for files that -- If true, MSBuild project system will only load projects for files that
-- were opened in the editor. This setting is useful for big C# codebases -- were opened in the editor. This setting is useful for big C# codebases
-- and allows for faster initialization of code navigation features only -- and allows for faster initialization of code navigation features only
-- for projects that are relevant to code that is being edited. With this -- for projects that are relevant to code that is being edited. With this
-- setting enabled OmniSharp may load fewer projects and may thus display -- setting enabled OmniSharp may load fewer projects and may thus display
-- incomplete reference lists for symbols. -- incomplete reference lists for symbols.
enable_ms_build_load_projects_on_demand = false, -- default false enable_ms_build_load_projects_on_demand = false, -- default false
-- Enables support for roslyn analyzers, code fixes and rulesets. -- Enables support for roslyn analyzers, code fixes and rulesets.
enable_roslyn_analyzers = true, -- default false enable_roslyn_analyzers = true, -- default false
-- Specifies whether 'using' directives should be grouped and sorted during -- Specifies whether 'using' directives should be grouped and sorted during
-- document formatting. -- document formatting.
organize_imports_on_format = true, -- default false organize_imports_on_format = true, -- default false
-- Enables support for showing unimported types and unimported extension -- Enables support for showing unimported types and unimported extension
-- methods in completion lists. When committed, the appropriate using -- methods in completion lists. When committed, the appropriate using
-- directive will be added at the top of the current file. This option can -- directive will be added at the top of the current file. This option can
-- have a negative impact on initial completion responsiveness, -- have a negative impact on initial completion responsiveness,
-- particularly for the first few completion sessions after opening a -- particularly for the first few completion sessions after opening a
-- solution. -- solution.
enable_import_completion = true, -- default false enable_import_completion = true, -- default false
-- Specifies whether to include preview versions of the .NET SDK when -- Specifies whether to include preview versions of the .NET SDK when
-- determining which version to use for project loading. -- determining which version to use for project loading.
sdk_include_prereleases = true, sdk_include_prereleases = true,
-- Only run analyzers against open files when 'enableRoslynAnalyzers' is -- Only run analyzers against open files when 'enableRoslynAnalyzers' is
-- true -- true
analyze_open_documents_only = true, -- default false analyze_open_documents_only = true, -- default false
}) })
end, end,
["lua_ls"] = function() ["lua_ls"] = function()
require("lspconfig").lua_ls.setup({ require("lspconfig").lua_ls.setup({
settings = { settings = {
Lua = { Lua = {
runtime = { runtime = {
-- Tell the language server which version of Lua you're using -- Tell the language server which version of Lua you're using
-- (most likely LuaJIT in the case of Neovim) -- (most likely LuaJIT in the case of Neovim)
version = "LuaJIT", version = "LuaJIT",
}, },
diagnostics = { diagnostics = {
-- Get the language server to recognize the `vim` global -- Get the language server to recognize the `vim` global
globals = { globals = {
"vim", "vim",
"require", "require",
}, },
}, },
workspace = { workspace = {
checkThirdParty = false, -- stop a annoying dialog on startup checkThirdParty = false, -- stop a annoying dialog on startup
-- Make the server aware of Neovim runtime files -- Make the server aware of Neovim runtime files
-- library = vim.api.nvim_get_runtime_file("", true), -- library = vim.api.nvim_get_runtime_file("", true),
library = { library = {
[vim.fn.expand("$VIMRUNTIME/lua")] = true, [vim.fn.expand("$VIMRUNTIME/lua")] = true,
[vim.fn.expand("$VIMRUNTIME/lua/vim/lsp")] = true, [vim.fn.expand("$VIMRUNTIME/lua/vim/lsp")] = true,
}, },
}, },
-- Do not send telemetry data containing a randomized but unique identifier -- Do not send telemetry data containing a randomized but unique identifier
telemetry = { telemetry = {
enable = false, enable = false,
}, },
}, },
}, },
}) })
end, end,
}, },
}) })
end, end,
} }

View File

@ -1,100 +1,100 @@
local M = { local M = {
use_google_cache = nil, use_google_cache = nil,
flags = { blink = false }, flags = { blink = true },
} }
function M.exec(command, args) function M.exec(command, args)
local Job = require("plenary.job") local Job = require("plenary.job")
local job = Job:new({ local job = Job:new({
command = command, command = command,
args = args, args = args,
}) })
job:sync() job:sync()
job:wait() job:wait()
return job:result() return job:result()
end end
function M.map(mode, lhs, rhs, opts) function M.map(mode, lhs, rhs, opts)
local options = { noremap = true } local options = { noremap = true }
if opts then if opts then
options = vim.tbl_extend("force", options, opts) options = vim.tbl_extend("force", options, opts)
end end
-- vim.api.nvim_set_keymap(mode, lhs, rhs, options) -- vim.api.nvim_set_keymap(mode, lhs, rhs, options)
vim.keymap.set(mode, lhs, rhs, options) vim.keymap.set(mode, lhs, rhs, options)
end end
function M.use_google() function M.use_google()
if M.use_google_cache == nil then if M.use_google_cache == nil then
M.use_google_cache = M.file_exists(os.getenv("HOME") .. "/use_google") M.use_google_cache = M.file_exists(os.getenv("HOME") .. "/use_google")
end end
return M.use_google_cache return M.use_google_cache
end end
function M.file_exists(name) function M.file_exists(name)
local f = io.open(name, "r") local f = io.open(name, "r")
if f ~= nil then if f ~= nil then
io.close(f) io.close(f)
return true return true
else else
return false return false
end end
end end
function M.dump(o) function M.dump(o)
if type(o) == "table" then if type(o) == "table" then
local s = "{ " local s = "{ "
for k, v in pairs(o) do for k, v in pairs(o) do
if type(k) ~= "number" then if type(k) ~= "number" then
k = '"' .. k .. '"' k = '"' .. k .. '"'
end end
s = s .. "[" .. k .. "] = " .. M.dump(v) .. "," s = s .. "[" .. k .. "] = " .. M.dump(v) .. ","
end end
return s .. "} " return s .. "} "
else else
return tostring(o) return tostring(o)
end end
end end
function M.tprint(tbl, indent) function M.tprint(tbl, indent)
if not indent then if not indent then
indent = 0 indent = 0
end end
local toprint = string.rep(" ", indent) .. "{\r\n" local toprint = string.rep(" ", indent) .. "{\r\n"
indent = indent + 2 indent = indent + 2
for k, v in pairs(tbl) do for k, v in pairs(tbl) do
toprint = toprint .. string.rep(" ", indent) toprint = toprint .. string.rep(" ", indent)
if type(k) == "number" then if type(k) == "number" then
toprint = toprint .. "[" .. k .. "] = " toprint = toprint .. "[" .. k .. "] = "
elseif type(k) == "string" then elseif type(k) == "string" then
toprint = toprint .. k .. "= " toprint = toprint .. k .. "= "
end end
if type(v) == "number" then if type(v) == "number" then
toprint = toprint .. v .. ",\r\n" toprint = toprint .. v .. ",\r\n"
elseif type(v) == "string" then elseif type(v) == "string" then
toprint = toprint .. '"' .. v .. '",\r\n' toprint = toprint .. '"' .. v .. '",\r\n'
elseif type(v) == "table" then elseif type(v) == "table" then
toprint = toprint .. M.tprint(v, indent + 2) .. ",\r\n" toprint = toprint .. M.tprint(v, indent + 2) .. ",\r\n"
else else
toprint = toprint .. '"' .. tostring(v) .. '",\r\n' toprint = toprint .. '"' .. tostring(v) .. '",\r\n'
end end
end end
toprint = toprint .. string.rep(" ", indent - 2) .. "}" toprint = toprint .. string.rep(" ", indent - 2) .. "}"
return toprint return toprint
end end
function M.log(message) function M.log(message)
local log_file_path = vim.fn.expand("$HOME/nvim.log") local log_file_path = vim.fn.expand("$HOME/nvim.log")
local log_file = io.open(log_file_path, "a") local log_file = io.open(log_file_path, "a")
io.output(log_file) io.output(log_file)
io.write(message .. "\n") io.write(message .. "\n")
io.close(log_file) io.close(log_file)
end end
function M.TableConcat(t1, t2) function M.TableConcat(t1, t2)
for i = 1, #t2 do for i = 1, #t2 do
t1[#t1 + 1] = t2[i] t1[#t1 + 1] = t2[i]
end end
return t1 return t1
end end
return M return M