/markdown-oxide

PKM for the LSP

Primary LanguageRustGNU General Public License v3.0GPL-3.0

markdown-oxide: Robust, Minimalist, Unbundled PKM (Personal-Knowledge-Management System) for your favorite text-editor through the Language-Server-Protocol.

Quick Start

Docs

Here are some recommended links from our documentation website, https://oxide.md

Recommended Links

Quick Start

Get started with Markdown-oxide as fast as possible!

Set up the PKM for your text editor...

Neovim

  1. Give Neovim access to the binary.

    • Cargo Install (from source)
      cargo install --locked --git https://github.com/Feel-ix-343/markdown-oxide.git markdown-oxide
    • Cargo binstall (from hosted binary)
      cargo binstall --git 'https://github.com/feel-ix-343/markdown-oxide' markdown-oxide
    • AUR (from source)
      paru -S markdown-oxide-git
      yay -S markdown-oxide-git
    • Mason.nvim (from hosted binary)
    • Nix Unstable: pkgs.markdown-oxide
  2. Modify your Neovim Configuration ^nvimconfigsetup

    • Modify LSP Config (making sure to adjust capabilities as follows)
      -- An example nvim-lspconfig capabilities setting
      local capabilities = require("cmp_nvim_lsp").default_capabilities(vim.lsp.protocol.make_client_capabilities())
      
      require("lspconfig").markdown_oxide.setup({
          -- Ensure that dynamicRegistration is enabled! This allows the LS to take into account actions like the
          -- Create Unresolved File code action, resolving completions for unindexed code blocks, ...
          capabilities = vim.tbl_deep_extend(
              'force',
              capabilities,
              {
                  workspace = {
                      didChangeWatchedFiles = {
                          dynamicRegistration = true,
                      },
                  },
              }
          ),
          on_attach = on_attach -- configure your on attach config
      })
    • Modify your nvim-cmp configuration

      Modify your nvim-cmp source settings for nvim-lsp (note: you must have nvim-lsp installed)

      {
      name = 'nvim_lsp',
        option = {
          markdown_oxide = {
            keyword_pattern = [[\(\k\| \|\/\|#\)\+]]
          }
        }
      },
    • (optional) Enable Code Lens (eg for UI reference count)

      Modify your lsp on_attach function.

      local function check_codelens_support()
      local clients = vim.lsp.get_active_clients({ bufnr = 0 })
      for _, c in ipairs(clients) do
        if c.server_capabilities.codeLensProvider then
          return true
        end
      end
      return false
      end
      
      vim.api.nvim_create_autocmd({ 'TextChanged', 'InsertLeave', 'CursorHold', 'LspAttach', 'BufEnter' }, {
      buffer = bufnr,
      callback = function ()
        if check_codelens_support() then
          vim.lsp.codelens.refresh({bufnr = 0})
        end
      end
      })
      -- trigger codelens refresh
      vim.api.nvim_exec_autocmds('User', { pattern = 'LspAttached' })
    • (optional) Enable opening daily notes with natural langauge

      Modify your lsp on_attach function to support opening daily notes with, for example, :Daily two days ago or :Daily next monday.

      -- setup Markdown Oxide daily note commands
      if client.name == "markdown_oxide" then
      
        vim.api.nvim_create_user_command(
          "Daily",
          function(args)
            local input = args.args
      
            vim.lsp.buf.execute_command({command="jump", arguments={input}})
      
          end,
          {desc = 'Open daily note', nargs = "*"}
        )
      end
  • Ensure relevant plugins are installed:
    • Nvim CMP: UI for using LSP completions
    • Telescope: UI helpful for the LSP references implementation
      • Allows you to view and fuzzy match backlinks to files, headings, and blocks.
    • Lspsaga: UI generally helpful for LSP commands
      • Allows you to edit linked markdown files in a popup window, for example.

VSCode

Install the vscode extension (called Markdown Oxide). As for how the extension uses the language server, there are two options

  1. Recommended: the extension will download the server's binary and use that

  2. The extension will use markdown-oxide from path. To install to your path, there are the following methods for VSCode:

    • Cargo Install (from source)
      cargo install --locked --git https://github.com/Feel-ix-343/markdown-oxide.git markdown-oxide
    • Cargo binstall[1] (from hosted binary)
      cargo binstall --git 'https://github.com/feel-ix-343/markdown-oxide' markdown-oxide
    • AUR (from source)
      paru -S markdown-oxide-git
      yay -S markdown-oxide-git
    • Nix Unstable: pkgs.markdown-oxide

Zed

Markdown Oxide is available as an extension titled Markdown Oxide. Similarly to VSCode, there are two methods for this extension to access the language server

  1. Recommended: the extension will download the server's binary and use that

  2. The extension will use markdown-oxide from path. To install to your path, there are the following methods for Zed:

    • Cargo Install (from source)
      cargo install --locked --git https://github.com/Feel-ix-343/markdown-oxide.git markdown-oxide
    • Cargo binstall[1] (from hosted binary)
      cargo binstall --git 'https://github.com/feel-ix-343/markdown-oxide' markdown-oxide
    • AUR (from source)
      paru -S markdown-oxide-git
      yay -S markdown-oxide-git
    • Nix Unstable: pkgs.markdown-oxide

Helix

For Helix, all you must do is install the language server's binary to your path. The following installation methods are available:

  • Cargo Install (from source)
    cargo install --locked --git https://github.com/Feel-ix-343/markdown-oxide.git markdown-oxide
  • Cargo binstall[1] (from hosted binary)
    cargo binstall --git 'https://github.com/feel-ix-343/markdown-oxide' markdown-oxide
  • AUR (from source)
    paru -S markdown-oxide-git
    yay -S markdown-oxide-git
  • Nix Unstable: pkgs.markdown-oxide