From c489d393695e90d424f9ae51e35c4d42358e6a71 Mon Sep 17 00:00:00 2001 From: Squibid Date: Fri, 9 Aug 2024 02:45:31 -0400 Subject: yes there's a bit of java in my nvim config why do you ask? --- lua/conf/plugins/neorg.lua | 135 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 135 insertions(+) create mode 100644 lua/conf/plugins/neorg.lua (limited to 'lua/conf/plugins/neorg.lua') diff --git a/lua/conf/plugins/neorg.lua b/lua/conf/plugins/neorg.lua new file mode 100644 index 0000000..b67cb78 --- /dev/null +++ b/lua/conf/plugins/neorg.lua @@ -0,0 +1,135 @@ +-- WARNING: neorg does some pretty stupid stuff when it comes to the plugins it +-- wants (using luarocks), in order to get around all that bullshit I've +-- manually added it's dependencies. Because I don't want this to randomly break +-- I've also pinned neorg to the latest working version that I've messed around +-- with. +-- +-- NOTE: for my future self to update this thingy while not breaking +-- dependencies take a look at the build.lua for versioning info. Also make sure +-- to check the release notes on github for info on breaking changes. + +local workspace_cache = vim.fs.joinpath(vim.fn.stdpath("data"), "neorg-workspace-cache.lua") + +--- populate neorg workspaces from path or cache +---@param path string path to populate workspaces from +---@param cache boolean? if true will re populate the cache from the fs +---@return table workspaces +local function populate_workspaces(path, cache) + local workspaces = {} + cache = cache or false + + if vim.fn.filereadable(workspace_cache) == 1 and not cache then + local ok, ret = pcall(dofile, workspace_cache) + if ok and type(ret) == "table" then + return ret + end + end + + -- loop through all files in path if path is not empty + if vim.fn.empty(vim.fn.glob(path)) == 0 then + for n, t in vim.fs.dir(path) do + if string.sub(n, 1, 1) == "." or (t ~= "directory" and t ~= "link") then + goto continue + end + -- make sure this still works if the last charachter in the path isn't a '/' + workspaces[n] = (string.sub(path, #path, #path) == "/") and path..n or path.."/"..n + ::continue:: + end + end + + -- write data to cachefile + local f = io.open(workspace_cache, "w+") + if not f then + return workspaces + end + + f:write("return") + local ret = vim.inspect(workspaces) + if type(ret) == "string" then + f:write(ret) + else + f:write("false") + end + + f:close() + + return workspaces +end + +return { 'nvim-neorg/neorg', + disable = vim.version.lt(vim.version(), { 0, 10, 0 }), + branch = 'v9.1.1', + requires = { + 'nvim-lua/plenary.nvim', + 'nvim-treesitter/nvim-treesitter', + 'folke/zen-mode.nvim', + 'hrsh7th/nvim-cmp', + { 'nvim-neorg/neorg-telescope', + requires = 'nvim-telescope/telescope.nvim' + }, + + -- NOTE: these are usually installed by neorg via luarocks, the versions + -- were picked based on the build.lua found in the root of the neorg repo + { 'nvim-neotest/nvim-nio', + branch = 'v1.7.0' + }, + { 'nvim-neorg/lua-utils.nvim', + branch = 'v1.0.2' + }, + { 'MunifTanjim/nui.nvim', + branch = '0.3.0' + }, + { 'pysan3/pathlib.nvim', + branch = 'v2.2.2' + } + }, + + function() + local wsphome = (os.getenv("XDG_DOCUMENTS_DIR") or + (os.getenv("HOME").."/Documents")).."/notes/" + + require('neorg').setup { + load = { + -- not sure how to sort the modules so ima just put the empty ones first + ["core.defaults"] = {}, + ["core.export"] = {}, + ["core.export.markdown"] = {}, + ["core.integrations.telescope"] = {}, + ["core.summary"] = {}, + ["core.ui.calendar"] = {}, + + ["core.completion"] = { + config = { + engine = "nvim-cmp" + } + }, + ["core.concealer"] = { + config = { + folds = false + } + }, + ["core.dirman"] = { + config = { + -- a list of available workspaces are generated at runtime >:) + workspaces = populate_workspaces(wsphome) + } + }, + ["core.esupports.metagen"] = { + config = { + type = "auto" + } + }, + ["core.presenter"] = { + config = { + zen_mode = "zen-mode" + } + }, + ["core.qol.toc"] = { + config = { + close_after_use = true + } + } + } + } + end +} -- cgit v1.2.1