summaryrefslogtreecommitdiffstatshomepage
path: root/nvim/lua
diff options
context:
space:
mode:
Diffstat (limited to 'nvim/lua')
-rw-r--r--nvim/lua/theprimeagen/debugger.lua19
-rw-r--r--nvim/lua/theprimeagen/git-worktree.lua29
-rw-r--r--nvim/lua/theprimeagen/harpoon.lua13
-rw-r--r--nvim/lua/theprimeagen/init.lua19
-rw-r--r--nvim/lua/theprimeagen/lsp.lua191
-rw-r--r--nvim/lua/theprimeagen/telescope.lua222
6 files changed, 493 insertions, 0 deletions
diff --git a/nvim/lua/theprimeagen/debugger.lua b/nvim/lua/theprimeagen/debugger.lua
new file mode 100644
index 0000000..c935273
--- /dev/null
+++ b/nvim/lua/theprimeagen/debugger.lua
@@ -0,0 +1,19 @@
+local dap_install = require("dap-install")
+dap_install.config("chrome", {})
+
+
+local dap = require("dap");
+dap.configurations.typescriptreact = { -- change to typescript if needed
+ {
+ type = "chrome",
+ request = "attach",
+ program = "${file}",
+ cwd = vim.fn.getcwd(),
+ sourceMaps = true,
+ protocol = "inspector",
+ port = 9222,
+ webRoot = "${workspaceFolder}"
+ }
+}
+
+require('dap.ext.vscode').load_launchjs()
diff --git a/nvim/lua/theprimeagen/git-worktree.lua b/nvim/lua/theprimeagen/git-worktree.lua
new file mode 100644
index 0000000..7c3bce9
--- /dev/null
+++ b/nvim/lua/theprimeagen/git-worktree.lua
@@ -0,0 +1,29 @@
+local Worktree = require("git-worktree")
+
+local function is_nrdp(path)
+ local found = path:find(vim.env["NRDP"])
+ return type(found) == "number" and found > 0
+end
+
+local function is_tvui(path)
+ local found = path:find(vim.env["TVUI"])
+ return type(found) == "number" and found > 0
+end
+
+local M = {}
+function M.execute(path, just_build)
+ if is_nrdp(path) then
+ local command = string.format(":silent !tmux-nrdp tmux %s %s", path, just_build)
+ vim.cmd(command)
+ elseif is_tvui(path) then
+ print("EXECUTE ", path)
+ local command = string.format(":!tmux-tvui %s", path)
+ vim.cmd(command)
+ end
+end
+
+Worktree.on_tree_change(function(_ --[[op]], path, _ --[[upstream]])
+ M.execute(path.path)
+end)
+
+return M
diff --git a/nvim/lua/theprimeagen/harpoon.lua b/nvim/lua/theprimeagen/harpoon.lua
new file mode 100644
index 0000000..4f1543e
--- /dev/null
+++ b/nvim/lua/theprimeagen/harpoon.lua
@@ -0,0 +1,13 @@
+require("harpoon").setup({
+ nav_first_in_list = true,
+ projects = {
+ ["/home/theprimeagen/work/nrdp/backport-2"] = {
+ term = {
+ cmds = {
+ "ninja -C /home/theprimeagen/work/nrdp/builds/backport-2 -j 25 && cp compile_commands.json /home/theprimeagen/work/nrdp/backport-2\n",
+ }
+ }
+ }
+ }
+})
+
diff --git a/nvim/lua/theprimeagen/init.lua b/nvim/lua/theprimeagen/init.lua
new file mode 100644
index 0000000..5db4e28
--- /dev/null
+++ b/nvim/lua/theprimeagen/init.lua
@@ -0,0 +1,19 @@
+require("theprimeagen.telescope")
+require("theprimeagen.git-worktree")
+require("theprimeagen.debugger")
+require("theprimeagen.harpoon")
+require("theprimeagen.lsp")
+
+P = function(v)
+ print(vim.inspect(v))
+ return v
+end
+
+if pcall(require, "plenary") then
+ RELOAD = require("plenary.reload").reload_module
+
+ R = function(name)
+ RELOAD(name)
+ return require(name)
+ end
+end
diff --git a/nvim/lua/theprimeagen/lsp.lua b/nvim/lua/theprimeagen/lsp.lua
new file mode 100644
index 0000000..3911c72
--- /dev/null
+++ b/nvim/lua/theprimeagen/lsp.lua
@@ -0,0 +1,191 @@
+local sumneko_root_path = "/home/mpaulson/personal/lua-language-server"
+local sumneko_binary = sumneko_root_path .. "/bin/lua-language-server"
+
+local capabilities = vim.lsp.protocol.make_client_capabilities()
+capabilities.textDocument.completion.completionItem.snippetSupport = true
+
+-- Setup nvim-cmp.
+local cmp = require("cmp")
+local source_mapping = {
+ buffer = "[Buffer]",
+ nvim_lsp = "[LSP]",
+ nvim_lua = "[Lua]",
+ path = "[Path]"
+}
+local lspkind = require("lspkind")
+require("lspkind").init({
+ mode = 'Text'
+})
+
+cmp.setup({
+ snippet = {
+ expand = function(args)
+ -- For `vsnip` user.
+ -- vim.fn["vsnip#anonymous"](args.body)
+
+ -- For `luasnip` user.
+ require("luasnip").lsp_expand(args.body)
+
+ -- For `ultisnips` user.
+ -- vim.fn["UltiSnips#Anon"](args.body)
+ end
+ },
+ mapping = {
+ ["<C-u>"] = cmp.mapping.scroll_docs(-4),
+ ["<C-d>"] = cmp.mapping.scroll_docs(4),
+ ["<C-Space>"] = cmp.mapping.complete()
+ },
+
+ formatting = {
+ format = function(entry, vim_item)
+ vim_item.kind = lspkind.presets.default[vim_item.kind]
+ local menu = source_mapping[entry.source.name]
+ vim_item.menu = menu
+ return vim_item
+ end
+ },
+
+ sources = {{
+ name = "nvim_lsp"
+ }, -- For vsnip user.
+ -- { name = 'vsnip' },
+ -- For luasnip user.
+ {
+ name = "luasnip"
+ }, -- For ultisnips user.
+ -- { name = 'ultisnips' },
+ {
+ name = "buffer"
+ }}
+})
+
+local function config(_config)
+ return vim.tbl_deep_extend("force", {
+ capabilities = require("cmp_nvim_lsp").update_capabilities(vim.lsp.protocol.make_client_capabilities())
+ }, _config or {})
+end
+
+require("lspconfig").tsserver.setup(config())
+
+--[[ I cannot seem to get this woring on new computer..
+require("lspconfig").clangd.setup(config({
+ cmd = { "clangd", "--background-index", "--log=verbose" },
+ root_dir = function()
+ print("clangd-Rootdir", vim.loop.cwd())
+ return vim.loop.cwd()
+ end,
+}))
+--]]
+require("lspconfig").ccls.setup(config())
+
+require("lspconfig").jedi_language_server.setup(config())
+
+require("lspconfig").svelte.setup(config())
+
+require("lspconfig").solang.setup(config())
+
+require("lspconfig").cssls.setup(config())
+
+require("lspconfig").gopls.setup(config({
+ cmd = {"gopls", "serve"},
+ settings = {
+ gopls = {
+ analyses = {
+ unusedparams = true
+ },
+ staticcheck = true
+ }
+ }
+}))
+
+require('rust-tools').setup(config({
+ tools = {
+ autoSetHints = true,
+ hover_with_actions = true,
+ runnables = {
+ use_telescope = true
+ },
+ inlay_hints = {
+ show_parameter_hints = false,
+ parameter_hints_prefix = "",
+ other_hints_prefix = ""
+ }
+ },
+
+ -- all the opts to send to nvim-lspconfig
+ -- these override the defaults set by rust-tools.nvim
+ -- see https://github.com/neovim/nvim-lspconfig/blob/master/CONFIG.md#rust_analyzer
+ server = {
+ -- on_attach is a callback called when the language server attachs to the buffer
+ -- on_attach = on_attach,
+ settings = {
+ -- to enable rust-analyzer settings visit:
+ -- https://github.com/rust-analyzer/rust-analyzer/blob/master/docs/user/generated_config.adoc
+ ["rust-analyzer"] = {
+ -- enable clippy on save
+ checkOnSave = {
+ command = "clippy"
+ }
+ }
+ }
+ }
+}))
+
+require("lspconfig").sumneko_lua.setup(config({
+ cmd = {sumneko_binary, "-E", sumneko_root_path .. "/main.lua"},
+ settings = {
+ Lua = {
+ runtime = {
+ -- Tell the language server which version of Lua you're using (most likely LuaJIT in the case of Neovim)
+ version = "LuaJIT",
+ -- Setup your lua path
+ path = vim.split(package.path, ";")
+ },
+ diagnostics = {
+ -- Get the language server to recognize the `vim` global
+ globals = {"vim"}
+ },
+ workspace = {
+ -- Make the server aware of Neovim runtime files
+ library = {
+ [vim.fn.expand("$VIMRUNTIME/lua")] = true,
+ [vim.fn.expand("$VIMRUNTIME/lua/vim/lsp")] = true
+ }
+ }
+ }
+ }
+}))
+
+local opts = {
+ -- whether to highlight the currently hovered symbol
+ -- disable if your cpu usage is higher than you want it
+ -- or you just hate the highlight
+ -- default: true
+ highlight_hovered_item = true,
+
+ -- whether to show outline guides
+ -- default: true
+ show_guides = true
+}
+
+require("symbols-outline").setup(opts)
+
+local snippets_paths = function()
+ local plugins = {"friendly-snippets"}
+ local paths = {}
+ local path
+ local root_path = vim.env.HOME .. "/.vim/plugged/"
+ for _, plug in ipairs(plugins) do
+ path = root_path .. plug
+ if vim.fn.isdirectory(path) ~= 0 then
+ table.insert(paths, path)
+ end
+ end
+ return paths
+end
+
+require("luasnip.loaders.from_vscode").lazy_load({
+ paths = snippets_paths(),
+ include = nil, -- Load all languages
+ exclude = {}
+})
diff --git a/nvim/lua/theprimeagen/telescope.lua b/nvim/lua/theprimeagen/telescope.lua
new file mode 100644
index 0000000..2be6bbb
--- /dev/null
+++ b/nvim/lua/theprimeagen/telescope.lua
@@ -0,0 +1,222 @@
+local pickers = require("telescope.pickers")
+local finders = require("telescope.finders")
+local previewers = require("telescope.previewers")
+local action_state = require("telescope.actions.state")
+local conf = require("telescope.config").values
+local actions = require("telescope.actions")
+
+require("telescope").setup({
+ defaults = {
+ file_sorter = require("telescope.sorters").get_fzy_sorter,
+ prompt_prefix = " >",
+ color_devicons = true,
+
+ file_previewer = require("telescope.previewers").vim_buffer_cat.new,
+ grep_previewer = require("telescope.previewers").vim_buffer_vimgrep.new,
+ qflist_previewer = require("telescope.previewers").vim_buffer_qflist.new,
+
+ mappings = {
+ i = {
+ ["<C-x>"] = false,
+ ["<C-q>"] = actions.send_to_qflist,
+ },
+ },
+ },
+ extensions = {
+ fzy_native = {
+ override_generic_sorter = false,
+ override_file_sorter = true,
+ },
+ },
+})
+
+require("telescope").load_extension("git_worktree")
+require("telescope").load_extension("fzy_native")
+
+local M = {}
+
+function M.reload_modules()
+ -- Because TJ gave it to me. Makes me happpy. Put it next to his other
+ -- awesome things.
+ local lua_dirs = vim.fn.glob("./lua/*", 0, 1)
+ for _, dir in ipairs(lua_dirs) do
+ dir = string.gsub(dir, "./lua/", "")
+ require("plenary.reload").reload_module(dir)
+ end
+end
+
+M.search_dotfiles = function()
+ require("telescope.builtin").find_files({
+ prompt_title = "< VimRC >",
+ cwd = vim.env.DOTFILES,
+ hidden = true,
+ })
+end
+
+local function set_background(content)
+ vim.fn.system("dconf write /org/mate/desktop/background/picture-filename \"'" .. content .. "'\"")
+end
+
+local function select_background(prompt_bufnr, map)
+ local function set_the_background(close)
+ local content = require("telescope.actions.state").get_selected_entry(prompt_bufnr)
+ set_background(content.cwd .. "/" .. content.value)
+ if close then
+ require("telescope.actions").close(prompt_bufnr)
+ end
+ end
+
+ map("i", "<C-p>", function()
+ set_the_background()
+ end)
+
+ map("i", "<CR>", function()
+ set_the_background(true)
+ end)
+end
+
+local function image_selector(prompt, cwd)
+ return function()
+ require("telescope.builtin").find_files({
+ prompt_title = prompt,
+ cwd = cwd,
+
+ attach_mappings = function(prompt_bufnr, map)
+ select_background(prompt_bufnr, map)
+
+ -- Please continue mapping (attaching additional key maps):
+ -- Ctrl+n/p to move up and down the list.
+ return true
+ end,
+ })
+ end
+end
+
+M.anime_selector = image_selector("< Anime Bobs > ", "~/personal/anime")
+
+local function refactor(prompt_bufnr)
+ local content = require("telescope.actions.state").get_selected_entry(prompt_bufnr)
+ require("telescope.actions").close(prompt_bufnr)
+ require("refactoring").refactor(content.value)
+end
+
+M.refactors = function()
+ require("telescope.pickers").new({}, {
+ prompt_title = "refactors",
+ finder = require("telescope.finders").new_table({
+ results = require("refactoring").get_refactors(),
+ }),
+ sorter = require("telescope.config").values.generic_sorter({}),
+ attach_mappings = function(_, map)
+ map("i", "<CR>", refactor)
+ map("n", "<CR>", refactor)
+ return true
+ end,
+ }):find()
+end
+
+M.git_branches = function()
+ require("telescope.builtin").git_branches({
+ attach_mappings = function(_, map)
+ map("i", "<c-d>", actions.git_delete_branch)
+ map("n", "<c-d>", actions.git_delete_branch)
+ return true
+ end,
+ })
+end
+
+M.dev = function(opts)
+ opts = opts or {}
+
+ opts.cwd = opts.cwd or vim.loop.fs_realpath(vim.loop.cwd())
+ print("HEY BAE", opts.cwd)
+
+ local possible_files = vim.api.nvim_get_runtime_file("/lua/**/dev.lua", true)
+ local local_files = {}
+ for _, raw_f in ipairs(possible_files) do
+ local real_f = vim.loop.fs_realpath(raw_f)
+
+ if string.find(real_f, opts.cwd, 1, true) then
+ table.insert(local_files, real_f)
+ end
+ end
+
+ local dev = local_files[1]
+ local loaded = loadfile(dev)
+ local ok, mod = pcall(loaded)
+ if not ok then
+ print("===================================================")
+ print("HEY PRIME. YOUR CODE DOESNT WORK. THIS IS NOT ON ME")
+ print("===================================================")
+ return
+ end
+
+ -- P(mod)
+ local objs = {}
+ for k, v in pairs(mod) do
+ local debug_info = debug.getinfo(v)
+ table.insert(objs, {
+ filename = string.sub(debug_info.source, 2),
+ text = k,
+ })
+ end
+
+ local mod_name = vim.split(dev, "/lua/")
+ if #mod_name ~= 2 then
+ print("===================================================")
+ print("HEY PRIME. I DO NOT KNOW HOW TO FIND THIS FILE:")
+ print(dev)
+ print("===================================================")
+ end
+ mod_name = string.gsub(mod_name[2], ".lua$", "")
+ mod_name = string.gsub(mod_name, "/", ".")
+
+ pickers.new({
+ finder = finders.new_table({
+ results = objs,
+ entry_maker = function(entry)
+ return {
+ value = entry,
+ text = entry.text,
+ display = entry.text,
+ ordinal = entry.text,
+ filename = entry.filename,
+ }
+ end,
+ }),
+ sorter = conf.generic_sorter(opts),
+ previewer = previewers.builtin.new(opts),
+ attach_mappings = function(_, map)
+ actions.select_default:replace(function(...)
+ -- print("SELECTED", vim.inspect(action_state.get_selected_entry()))
+ local entry = action_state.get_selected_entry()
+ actions.close(...)
+
+ mod[entry.value.text]()
+ end)
+
+ map("i", "<tab>", function(...)
+ local entry = action_state.get_selected_entry()
+ actions.close(...)
+
+ vim.schedule(function()
+ -- vim.cmd(string.format([[normal!]], entry.value.text))
+ vim.api.nvim_feedkeys(
+ vim.api.nvim_replace_termcodes(
+ string.format("<esc>:lua require('%s').%s()", mod_name, entry.value.text),
+ true,
+ false,
+ true
+ ),
+ "n",
+ true
+ )
+ end)
+ end)
+
+ return true
+ end,
+ }):find()
+end
+
+return M