aboutsummaryrefslogtreecommitdiff
path: root/README.md
blob: e4dfd0c0553c0c0779dc15dd4806fbb99b95f419 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
# muwiki.nvim

A lightweight wiki plugin for Neovim using standard markdown syntax.

## Requirements

- Neovim v0.10+
- Treesitter markdown parsers (`:TSInstall markdown markdown_inline`)

## Features

- Standard markdown links `[text](url)`
- Multiple wiki directories
- Link navigation and xdg-open for web/file links
- Extensible via autocmds (mkdir, templates, custom handlers)

See `:help muwiki` for complete documentation and configuration options.

## Installation

### Using vim.pack (Neovim 0.12+)

```lua
vim.pack.add({
  { src = "https://git.3kgcat.fi/muwiki.nvim" }
})
```

### Using lazy.nvim

```lua
{
  url = "https://git.3kgcat.fi/muwiki.nvim",
  keys = {
    { "<leader>ww", function() require("muwiki").open_index("default") end, desc = "Open wiki index" },
  },
  opts = {
    dirs = {{ name = 'default', path = '~/wiki' }},
  },

  config = function(_, opts)
    local muwiki = require('muwiki')
    muwiki.setup(opts)

    local group = vim.api.nvim_create_augroup("muwiki", { clear = true })

    vim.api.nvim_create_autocmd("FileType", {
      group = group,
      pattern = "markdown",
      callback = function(ev)
        if not muwiki.wiki_root(ev.buf) then return end
        local keymap_opts = { buffer = ev.buf, silent = true, nowait = true }
        vim.keymap.set('n', '<CR>', muwiki.open_link, keymap_opts)
        vim.keymap.set('n', '<Tab>', muwiki.next_link, keymap_opts)
        vim.keymap.set('n', '<S-Tab>', muwiki.prev_link, keymap_opts)
        vim.keymap.set('v', '<CR>', muwiki.create_link, keymap_opts)
      end,
    })
  end,

}
```

## Quick Start

Add this to your config for basic wiki functionality:

```lua
local muwiki = require('muwiki')

-- Configure wiki directories
muwiki.setup({
  dirs = {{ name = 'default', path = '~/wiki' }},
})

-- Quick access to wiki index
vim.keymap.set('n', '<leader>ww', function()
  muwiki.open_index("default")
end, { desc = "Open wiki index" })

-- Keymaps for wiki navigation (only active in wiki files)
vim.api.nvim_create_autocmd("FileType", {
  pattern = "markdown",
  callback = function(args)
    if not muwiki.wiki_root(args.buf) then return end

    local opts = { buffer = args.buf, silent = true }
    vim.keymap.set('n', '<CR>', muwiki.open_link, opts)
    vim.keymap.set('n', '<Tab>', muwiki.next_link, opts)
    vim.keymap.set('n', '<S-Tab>', muwiki.prev_link, opts)
    vim.keymap.set('v', '<CR>', muwiki.create_link, opts)
  end,
})

-- Auto-create directories when saving new files
vim.api.nvim_create_autocmd("BufWritePre", {
  pattern = "*.md",
  callback = function(args)
    local wiki_root = muwiki.wiki_root(args.buf)
    if not wiki_root then return end
    local dir = vim.fn.fnamemodify(args.file, ":h")
    if vim.fn.isdirectory(dir) == 0 then
      vim.fn.mkdir(dir, "p")
    end
  end,
})
```

See `:help muwiki-autocmd` for more examples.

## Available Actions

- `open_link()` - Open link under cursor (wiki→nvim, web/files→xdg-open)
- `next_link()` - Jump to next markdown link
- `prev_link()` - Jump to previous markdown link
- `create_link()` - Create link from visual selection
- `get_link()` - Get link info at cursor
- `open_index(name)` - Open wiki index file
- `open_with_menu(handlers)` - Open link with selectable handler

## Link Format

```text
[Wiki page](page.md)
[Website](https://example.com)
[Relative path](file://../document.pdf)
[Absolute path](file:///tmp/image.png)
```

## Recommended Plugins

These plugins work well with muwiki.nvim:

- [render-markdown.nvim](https://github.com/MeanderingProgrammer/render-markdown.nvim) - Improve markdown rendering in Neovim
- [outline.nvim](https://github.com/hedyhli/outline.nvim) - Navigate document structure with symbols outline

See `:help muwiki` for full documentation.