summaryrefslogtreecommitdiffstats
path: root/lua/conf/plugins/neorg.lua
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--lua/conf/plugins/neorg.lua135
1 files changed, 135 insertions, 0 deletions
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
+}