From 1afab443851939f3a314838bfe8d92b984d8b8e1 Mon Sep 17 00:00:00 2001 From: kjuulh Date: Sun, 9 Oct 2022 19:20:47 +0200 Subject: [PATCH] Added base setup --- init.lua | 6 + lua/config/plugins.lua | 39 +++++++ lua/plugins/neo-tree.lua | 8 ++ lua/plugins/treesitter.lua | 23 ++++ lua/util/init.lua | 41 +++++++ lua/util/packer.lua | 127 +++++++++++++++++++++ plugin/packer_compiled.lua | 220 +++++++++++++++++++++++++++++++++++++ 7 files changed, 464 insertions(+) create mode 100644 init.lua create mode 100644 lua/config/plugins.lua create mode 100644 lua/plugins/neo-tree.lua create mode 100644 lua/plugins/treesitter.lua create mode 100644 lua/util/init.lua create mode 100644 lua/util/packer.lua create mode 100644 plugin/packer_compiled.lua diff --git a/init.lua b/init.lua new file mode 100644 index 0000000..5c709da --- /dev/null +++ b/init.lua @@ -0,0 +1,6 @@ +local util = require("util") + +vim.schedule(function() + util.packer_deferred() + util.require("config.plugins") +end) diff --git a/lua/config/plugins.lua b/lua/config/plugins.lua new file mode 100644 index 0000000..4ff681e --- /dev/null +++ b/lua/config/plugins.lua @@ -0,0 +1,39 @@ +local packer = require("util.packer") + +local config = { + opt_default = true, + auto_reload_compiled = false, +} + + +local function plugins(use, plugin) + -- Bootstrap + use({ "wbthomason/packer.nvim" }) + + -- Explorer + plugin("nvim-neo-tree/neo-tree.nvim") + use({ + "MunifTanjim/nui.nvim", + module = "nui", + }) + + --plugin("nvim-treesitter/nvim-treesitter") + use({ "nvim-lua/plenary.nvim", module = "plenary" }) + + -- Theme: Icons + use({ + "kyazdani42/nvim-web-devicons", + module = "nvim-web-devicons", + config = function() + require("nvim-web-devicons").setup({ default = true }) + end, + }) + + plugin("nvim-treesitter/nvim-treesitter") + + use({ "nvim-treesitter/playground", cmd = { "TSHighlightCapturesUnderCursor", "TSPlaygroundToggle" } }) + + +end + +return packer.setup(config, plugins) diff --git a/lua/plugins/neo-tree.lua b/lua/plugins/neo-tree.lua new file mode 100644 index 0000000..b10bb3c --- /dev/null +++ b/lua/plugins/neo-tree.lua @@ -0,0 +1,8 @@ +return { + cmd = "Neotree", + config = function() + vim.cmd([[ let g:neo_tree_remove_legacy_commands = 1 ]]) + + require("neo-tree").setup({filesystem = {follow_current_file = true}}) + end, +} diff --git a/lua/plugins/treesitter.lua b/lua/plugins/treesitter.lua new file mode 100644 index 0000000..8ba63b2 --- /dev/null +++ b/lua/plugins/treesitter.lua @@ -0,0 +1,23 @@ +local M = { + run = ":TSUpdate", + event = "User PackerDefered", + requires = { + "nvim-treesitter/nvim-treesitter-textobjects", + "RRethy/nvim-treesitter-textsubjects", + "nvim-treesitter/nvim-treesitter-refactor", + }, +} + +function M.config() + require("nvim-treesitter.configs").setup({ + ensure_installed = { + "css", + "go", + "lua", + }, + sync_install = false, + auto_install = true, + }) +end + +return M diff --git a/lua/util/init.lua b/lua/util/init.lua new file mode 100644 index 0000000..508461f --- /dev/null +++ b/lua/util/init.lua @@ -0,0 +1,41 @@ +local M = {} + +function M.packer_deferred() + vim.cmd([[do User PackerDefered]]) +end + +function M.require(mod) + return M.try(require, mod) +end + +function M.try(fn, ...) + local args = { ... } + + return xpcall(function() + return fn(unpack(args)) + end, function(err) + local lines = {} + table.insert(lines, err) + table.insert(lines, debug.traceback("", 3)) + + M.error(table.concat(lines, "\n")) + return err + end) +end +function M.t(str) + return vim.api.nvim_replace_termcodes(str, true, true, true) +end + +function M.warn(msg, name) + vim.notify(msg, vim.log.levels.WARN, { title = name or "init.lua" }) +end + +function M.error(msg, name) + vim.notify(msg, vim.log.levels.ERROR, { title = name or "init.lua" }) +end + +function M.info(msg, name) + vim.notify(msg, vim.log.levels.INFO, { title = name or "init.lua" }) +end + +return M diff --git a/lua/util/packer.lua b/lua/util/packer.lua new file mode 100644 index 0000000..6715167 --- /dev/null +++ b/lua/util/packer.lua @@ -0,0 +1,127 @@ +local util = require("util") + +local M = {} + +M.local_plugins = {} + +function M.bootstrap() + local fn = vim.fn + local install_path = fn.stdpath("data") .. "/site/pack/packer/opt/packer.nvim" + if fn.empty(fn.glob(install_path)) > 0 then + fn.system({"git", "clone", "--depth", "1", "https://github.com/wbthomason/packer.nvim", install_path}) + return true + end + +end + +function M.auto_compile() + local group = vim.api.nvim_create_augroup("PackerUserConfig", {}) + vim.api.nvim_create_autocmd("BufWritePost", { + pattern = { "plugins.lua", "*/plugins/*.lua", "packer.lua" }, + group = group, + callback = function() + for p, _ in pairs(package.loaded) do + if p:find("^plugins") or p == "config.plugins" or p == "util.packer" then + package.loaded[p] = nil + end + end + require("config.plugins") + vim.cmd([[PackerCompile]]) + util.info("Packer compiled...") + end, + }) +end + +function M.use(spec, fn) + if type(spec) == "string" then + spec = { spec } + elseif type(spec) == "table" and #spec > 1 then + for i, child_spec in ipairs(spec) do + spec[i] = M.use(child_spec, fn) + end + return + end + if + type(spec.requires) == "string" + or (type(spec.requires) == "table" and not vim.tbl_islist(spec.requires) and #spec.requires == 1) + then + spec.requires = { spec.requires } + end + if spec.requires then + for i, v in ipairs(spec.requires) do + spec.requires[i] = M.use(v, fn) + end + end + fn(spec) + return spec +end + +function M.get_name(pkg) + local parts = vim.split(pkg, "/") + return parts[#parts], parts[1] +end + +function M.has_local(name) + return vim.loop.fs_stat(vim.fn.expand("~/projects/" .. name)) ~= nil +end + +function M.wrap(use) + return function(spec) + spec = M.use(spec, M.process_plugin) + use(spec) + end +end + +function M.process_plugin(spec) + if spec.plugin then + local ok, plugin = pcall(require, "plugins." .. spec.plugin) + if not ok then + util.error("Failed to load plugins." .. spec.plugin .. "\n\n" .. plugin) + else + for k, v in pairs(plugin) do + -- what we call init, is called setup in Packer + -- skip plugin.setup methods. Thos are to be called maually from scripts + local kk = k == "init" and "setup" or k ~= "setup" and k + if kk then + spec[kk] = type(v) == "function" and ([[require("plugins.%s").%s()]]):format(spec.plugin, k) or v + end + end + end + spec.plugin = nil + end +end + +function M.plugin(pkg) + local name = M.get_name(pkg):lower() + name = name:gsub("%.n?vim$", "") + name = name:gsub("^n?vim%-", "") + name = name:gsub("%-n?vim$", "") + name = name:gsub("%.lua$", "") + name = name:gsub("%.", "_") + return { pkg, plugin = name } +end + +function M.setup(config, fn) + local bootstrapped = M.bootstrap() + M.auto_compile() + + vim.cmd([[packadd packer.nvim]]) + + local packer = require("packer") + packer.init(config) + + M.local_plugins = config.local_plugins or {} + + packer.startup(function(use) + use = M.wrap(use) + fn(use, function(pkg) + return use(M.plugin(pkg)) + end) + end) + + if bootstrapped then + require("packer").sync() + end +end + +return M diff --git a/plugin/packer_compiled.lua b/plugin/packer_compiled.lua new file mode 100644 index 0000000..beb1052 --- /dev/null +++ b/plugin/packer_compiled.lua @@ -0,0 +1,220 @@ +-- Automatically generated packer.nvim plugin loader code + +if vim.api.nvim_call_function('has', {'nvim-0.5'}) ~= 1 then + vim.api.nvim_command('echohl WarningMsg | echom "Invalid Neovim version for packer.nvim! | echohl None"') + return +end + +vim.api.nvim_command('packadd packer.nvim') + +local no_errors, error_msg = pcall(function() + +_G._packer = _G._packer or {} +_G._packer.inside_compile = true + +local time +local profile_info +local should_profile = false +if should_profile then + local hrtime = vim.loop.hrtime + profile_info = {} + time = function(chunk, start) + if start then + profile_info[chunk] = hrtime() + else + profile_info[chunk] = (hrtime() - profile_info[chunk]) / 1e6 + end + end +else + time = function(chunk, start) end +end + +local function save_profiles(threshold) + local sorted_times = {} + for chunk_name, time_taken in pairs(profile_info) do + sorted_times[#sorted_times + 1] = {chunk_name, time_taken} + end + table.sort(sorted_times, function(a, b) return a[2] > b[2] end) + local results = {} + for i, elem in ipairs(sorted_times) do + if not threshold or threshold and elem[2] > threshold then + results[i] = elem[1] .. ' took ' .. elem[2] .. 'ms' + end + end + if threshold then + table.insert(results, '(Only showing plugins that took longer than ' .. threshold .. ' ms ' .. 'to load)') + end + + _G._packer.profile_output = results +end + +time([[Luarocks path setup]], true) +local package_path_str = "/home/kjuulh/.cache/nvim/packer_hererocks/2.1.0-beta3/share/lua/5.1/?.lua;/home/kjuulh/.cache/nvim/packer_hererocks/2.1.0-beta3/share/lua/5.1/?/init.lua;/home/kjuulh/.cache/nvim/packer_hererocks/2.1.0-beta3/lib/luarocks/rocks-5.1/?.lua;/home/kjuulh/.cache/nvim/packer_hererocks/2.1.0-beta3/lib/luarocks/rocks-5.1/?/init.lua" +local install_cpath_pattern = "/home/kjuulh/.cache/nvim/packer_hererocks/2.1.0-beta3/lib/lua/5.1/?.so" +if not string.find(package.path, package_path_str, 1, true) then + package.path = package.path .. ';' .. package_path_str +end + +if not string.find(package.cpath, install_cpath_pattern, 1, true) then + package.cpath = package.cpath .. ';' .. install_cpath_pattern +end + +time([[Luarocks path setup]], false) +time([[try_loadstring definition]], true) +local function try_loadstring(s, component, name) + local success, result = pcall(loadstring(s), name, _G.packer_plugins[name]) + if not success then + vim.schedule(function() + vim.api.nvim_notify('packer.nvim: Error running ' .. component .. ' for ' .. name .. ': ' .. result, vim.log.levels.ERROR, {}) + end) + end + return result +end + +time([[try_loadstring definition]], false) +time([[Defining packer_plugins]], true) +_G.packer_plugins = { + ["neo-tree.nvim"] = { + commands = { "Neotree" }, + config = { 'require("plugins.neo-tree").config()' }, + loaded = false, + needs_bufread = false, + only_cond = false, + path = "/home/kjuulh/.local/share/nvim/site/pack/packer/opt/neo-tree.nvim", + url = "https://github.com/nvim-neo-tree/neo-tree.nvim" + }, + ["nui.nvim"] = { + loaded = false, + needs_bufread = false, + only_cond = false, + path = "/home/kjuulh/.local/share/nvim/site/pack/packer/opt/nui.nvim", + url = "https://github.com/MunifTanjim/nui.nvim" + }, + ["nvim-treesitter"] = { + after = { "nvim-treesitter-textsubjects", "nvim-treesitter-textobjects", "nvim-treesitter-refactor" }, + config = { 'require("plugins.treesitter").config()' }, + loaded = false, + needs_bufread = false, + only_cond = false, + path = "/home/kjuulh/.local/share/nvim/site/pack/packer/opt/nvim-treesitter", + url = "https://github.com/nvim-treesitter/nvim-treesitter" + }, + ["nvim-treesitter-refactor"] = { + load_after = { + ["nvim-treesitter"] = true + }, + loaded = false, + needs_bufread = false, + path = "/home/kjuulh/.local/share/nvim/site/pack/packer/opt/nvim-treesitter-refactor", + url = "https://github.com/nvim-treesitter/nvim-treesitter-refactor" + }, + ["nvim-treesitter-textobjects"] = { + load_after = { + ["nvim-treesitter"] = true + }, + loaded = false, + needs_bufread = false, + path = "/home/kjuulh/.local/share/nvim/site/pack/packer/opt/nvim-treesitter-textobjects", + url = "https://github.com/nvim-treesitter/nvim-treesitter-textobjects" + }, + ["nvim-treesitter-textsubjects"] = { + load_after = { + ["nvim-treesitter"] = true + }, + loaded = false, + needs_bufread = false, + path = "/home/kjuulh/.local/share/nvim/site/pack/packer/opt/nvim-treesitter-textsubjects", + url = "https://github.com/RRethy/nvim-treesitter-textsubjects" + }, + ["nvim-web-devicons"] = { + config = { "\27LJ\2\nO\0\0\3\0\4\0\a6\0\0\0'\2\1\0B\0\2\0029\0\2\0005\2\3\0B\0\2\1K\0\1\0\1\0\1\fdefault\2\nsetup\22nvim-web-devicons\frequire\0" }, + loaded = false, + needs_bufread = false, + only_cond = false, + path = "/home/kjuulh/.local/share/nvim/site/pack/packer/opt/nvim-web-devicons", + url = "https://github.com/kyazdani42/nvim-web-devicons" + }, + ["packer.nvim"] = { + loaded = false, + needs_bufread = false, + path = "/home/kjuulh/.local/share/nvim/site/pack/packer/opt/packer.nvim", + url = "https://github.com/wbthomason/packer.nvim" + }, + playground = { + commands = { "TSHighlightCapturesUnderCursor", "TSPlaygroundToggle" }, + loaded = false, + needs_bufread = true, + only_cond = false, + path = "/home/kjuulh/.local/share/nvim/site/pack/packer/opt/playground", + url = "https://github.com/nvim-treesitter/playground" + }, + ["plenary.nvim"] = { + loaded = false, + needs_bufread = false, + only_cond = false, + path = "/home/kjuulh/.local/share/nvim/site/pack/packer/opt/plenary.nvim", + url = "https://github.com/nvim-lua/plenary.nvim" + } +} + +time([[Defining packer_plugins]], false) +local module_lazy_loads = { + ["^nui"] = "nui.nvim", + ["^nvim%-web%-devicons"] = "nvim-web-devicons", + ["^plenary"] = "plenary.nvim" +} +local lazy_load_called = {['packer.load'] = true} +local function lazy_load_module(module_name) + local to_load = {} + if lazy_load_called[module_name] then return nil end + lazy_load_called[module_name] = true + for module_pat, plugin_name in pairs(module_lazy_loads) do + if not _G.packer_plugins[plugin_name].loaded and string.match(module_name, module_pat) then + to_load[#to_load + 1] = plugin_name + end + end + + if #to_load > 0 then + require('packer.load')(to_load, {module = module_name}, _G.packer_plugins) + local loaded_mod = package.loaded[module_name] + if loaded_mod then + return function(modname) return loaded_mod end + end + end +end + +if not vim.g.packer_custom_loader_enabled then + table.insert(package.loaders, 1, lazy_load_module) + vim.g.packer_custom_loader_enabled = true +end + + +-- Command lazy-loads +time([[Defining lazy-load commands]], true) +pcall(vim.cmd, [[command -nargs=* -range -bang -complete=file TSHighlightCapturesUnderCursor lua require("packer.load")({'playground'}, { cmd = "TSHighlightCapturesUnderCursor", l1 = , l2 = , bang = , args = , mods = "" }, _G.packer_plugins)]]) +pcall(vim.cmd, [[command -nargs=* -range -bang -complete=file Neotree lua require("packer.load")({'neo-tree.nvim'}, { cmd = "Neotree", l1 = , l2 = , bang = , args = , mods = "" }, _G.packer_plugins)]]) +pcall(vim.cmd, [[command -nargs=* -range -bang -complete=file TSPlaygroundToggle lua require("packer.load")({'playground'}, { cmd = "TSPlaygroundToggle", l1 = , l2 = , bang = , args = , mods = "" }, _G.packer_plugins)]]) +time([[Defining lazy-load commands]], false) + +vim.cmd [[augroup packer_load_aucmds]] +vim.cmd [[au!]] + -- Event lazy-loads +time([[Defining lazy-load event autocommands]], true) +vim.cmd [[au User PackerDefered ++once lua require("packer.load")({'nvim-treesitter'}, { event = "User PackerDefered" }, _G.packer_plugins)]] +time([[Defining lazy-load event autocommands]], false) +vim.cmd("augroup END") + +_G._packer.inside_compile = false +if _G._packer.needs_bufread == true then + vim.cmd("doautocmd BufRead") +end +_G._packer.needs_bufread = false + +if should_profile then save_profiles() end + +end) + +if not no_errors then + error_msg = error_msg:gsub('"', '\\"') + vim.api.nvim_command('echohl ErrorMsg | echom "Error in packer_compiled: '..error_msg..'" | echom "Please check your config for correctness" | echohl None') +end