From e9bededbad0aba1a932eb1e03663840d2a1958ec Mon Sep 17 00:00:00 2001 From: Hawtian Wang Date: Thu, 29 Feb 2024 23:05:58 +0800 Subject: [PATCH] feat: init dora.nvim usage --- lua/dotvim/init.lua | 65 +++++++++++++++++++++++++ lua/dotvim/packages/lsp.lua | 39 +++++++++++++++ lua/dotvim/packages/obsidian.lua | 82 ++++++++++++++++++++++++++++++++ 3 files changed, 186 insertions(+) create mode 100644 lua/dotvim/init.lua create mode 100644 lua/dotvim/packages/lsp.lua create mode 100644 lua/dotvim/packages/obsidian.lua diff --git a/lua/dotvim/init.lua b/lua/dotvim/init.lua new file mode 100644 index 00000000..b7d5332a --- /dev/null +++ b/lua/dotvim/init.lua @@ -0,0 +1,65 @@ +local function install_missing_dora() + local dora_path = vim.fn.stdpath("data") .. "/lazy/dora.nvim" + + if not vim.uv.fs_stat(dora_path) then + vim + .system({ + "git", + "clone", + "https://github.com/TwIStOy/dora.nvim.git", + dora_path, + }) + :wait() + end + + vim.opt.rtp:prepend(dora_path) +end + +local M = {} + +function M.setup(opts) + install_missing_dora() + + ---@class dora + local dora = require("dora") + + opts = opts or {} + + opts.packages = { + "dora.packages._builtin", + "dora.packages.coding", + "dora.packages.editor", + "dora.packages.treesitter", + "dora.packages.lsp", + "dora.packages.ui", + "dora.packages.extra.ui", + "dora.packages.extra.misc.tools", + "dora.packages.extra.misc.darwin", + "dora.packages.extra.editor", + "dora.packages.extra.lang.cpp", + "dora.packages.extra.lang.cmake", + "dora.packages.extra.lang.lua", + "dora.packages.extra.lang.latex", + "dora.packages.extra.lang.markdown", + "dora.packages.extra.lang.python", + "dora.packages.extra.lang.rust", + "dora.packages.extra.lang.dart", + "dora.packages.extra.lang.swift", + "dora.packages.extra.lang.typescript", + "dora.packages.extra.lang.nix", + "dora.packages.extra.misc.competitive-programming", + "dora.packages.extra.obsidian", + "dora.packages.extra.misc.copilot", + "dora.packages.extra.misc.wakatime", + "dora.packages.extra.misc.rime", + + "dotvim.packages.obsidian", + "dotvim.packages.lsp", + } + + dora.setup(opts) + + vim.cmd("colorscheme catppuccin") +end + +return M diff --git a/lua/dotvim/packages/lsp.lua b/lua/dotvim/packages/lsp.lua new file mode 100644 index 00000000..6d6a4179 --- /dev/null +++ b/lua/dotvim/packages/lsp.lua @@ -0,0 +1,39 @@ +---@type dora.core.package.PackageOption +return { + name = "dotvim.packages.lsp", + deps = { + "dora.packages.extra.lsp", + }, + plugins = { + { + "aerial.nvim", + opts = function(_, opts) + local function post_parse_symbol(_, _item, ctx) + local function merge_nested_namespaces(item) + if + item.kind == "Namespace" + and #item.children == 1 + and item.children[1].kind == "Namespace" + and item.lnum == item.children[1].lnum + and item.end_lnum == item.children[1].end_lnum + then + item.name = item.name .. "::" .. item.children[1].name + item.children = item.children[1].children + for _, child in ipairs(item.children) do + child.parent = item + child.level = item.level + 1 + end + merge_nested_namespaces(item) + end + end + if ctx.backend_name == "lsp" and ctx.lang == "clangd" then + merge_nested_namespaces(_item) + end + return true + end + + opts.post_parse_symbol = post_parse_symbol + end, + }, + }, +} diff --git a/lua/dotvim/packages/obsidian.lua b/lua/dotvim/packages/obsidian.lua new file mode 100644 index 00000000..c74265b4 --- /dev/null +++ b/lua/dotvim/packages/obsidian.lua @@ -0,0 +1,82 @@ +local default_vault_path = { + "~/Documents/Main", + "~/Projects/obsidian-data/Main", +} + +local function resolve_obsidna_vault() + for _, path in ipairs(default_vault_path) do + local p = vim.fn.resolve(vim.fn.expand(path)) + if vim.fn.isdirectory(p) == 1 then + return p + end + end + return vim.fn.resolve(vim.fn.expand(default_vault_path[1])) +end + +---@type dora.core.package.PackageOption +return { + name = "dotvim.packages.obsidian", + deps = { + "dora.packages.extra.obsidian", + }, + plugins = { + { + "obsidian.nvim", + opts = { + dir = resolve_obsidna_vault(), + notes_subdir = "3-Resources/0-Zettel", + log_level = vim.log.levels.WARN, + daily_notes = { + folder = "3-Resources/0-Dairy", + date_format = "%Y-%m-%d", + alias_format = "%B %-d, %Y", + template = "Templates.nvim/daily-note.md", + }, + new_notes_location = "notes_subdir", + completion = { + nvim_cmp = true, + }, + templates = { + subdir = "0-Assets", + substitutions = { + daily_title = function() + return os.date("%B %-d, %Y") + end, + daily_date = function() + return os.date("%Y-%m-%d") + end, + }, + }, + use_advanced_uri = true, + mappings = {}, + note_id_func = function(_) + return ("%0x-%04x-%4x"):format( + os.time(), + math.random(0, 0xffff), + math.random(0, 0xffff) + ) + end, + note_frontmatter_func = function(note) + local out = { + id = note.id, + aliases = note.aliases, + tags = note.tags, + lastModifiedTime = os.date("%Y-%m-%d"), + } + if note.metadata ~= nil and not vim.tbl_isempty(note.metadata) then + for k, v in pairs(note.metadata) do + if out[k] == nil then + out[k] = v + end + end + end + if out["createdTime"] == nil then + out["createdTime"] = out["lastModifiedTime"] + end + return out + end, + yaml_parser = "yq", + }, + }, + }, +}