aboutsummaryrefslogtreecommitdiff
path: root/README.md
blob: b769f49b1f587b1d024e2e241cb9e2647986bdd4 (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
# denote-fzf-lua

Neovim plugin that uses [`fzf-lua`](https://github.com/ibhagwan/fzf-lua) to search a directory of notes formatted with the Emacs Denote file-naming scheme:

`DATE==SIGNATURE--TITLE__KEYWORDS.EXTENSION`

The nice custom table for Denote files is the only unique feature of this plugin. If you don't care about that you should just configure `fzf-lua` alone however you like it.

# Installation / Config

Example config via [lazy.nvim](https://github.com/folke/lazy.nvim)

```lua
{
  "DefaultGen/denote-fzf-lua",
  opts = {
    dir = "~/notes" -- Denote notes directory

    -- Toggle which Denote fields are displayed in search
    search_fields = {
      path  = false,
      date  = true,
      time  = false,
      sig   = false,
      title = true,
      tags  = true,
      ext   = false,
    },

    -- OPTIONAL:
    -- fzf-lua plugin options. Check fzf-lua docs for full details.
    -- Use this to set custom window and fzf options (and more)
    fzf_lua_opts = {
      winopts = {
        height = 0.85,
        width  = 0.80,
        row    = 0.35,
        col    = 0.50,
        preview = {
          layout = 'vertical',   -- vertical, horizontal, or flex
          vertical = 'down:45%', -- Alt: horizontal = 'right:50%'
        },
      },
      -- Options sent to fzf. If you don't include these, it will be
      -- set to the defaults below (which look like the screenshot)
      fzf_opts = {
        ['--reverse'] = true,
        ['--no-info'] = true,
        ['--no-separator'] = true,
        ['--no-hscroll'] = true,
        ['-i'] = true,
      },
    },
  },
},
```

## Dependencies

* [`ibhagwan/fzf-lua`](https://github.com/ibhagwan/fzf-lua) - Neovim plugin
* `fzf` - Fuzzy finder
* (OPTIONAL) `fd` - Fast `find` replacement
* (OPTIONAL) `sd` - Fast `sed` replacement
* (OPTIONAL) `qsv`- Fast `column` replacement
* (OPTIONAL) `bat` - Nicer preview than `cat`
* (OPTIONAL) `ripgrep` - Required to search note contents

```
Arch Linux: sudo pacman -S fzf ripgrep fd sd bat
            yay -S qsv-bin

Debian: sudo apt install fzf ripgrep fd-find sd bat
        export PATH=/usr/lib/cargo/bin/:$PATH (to add `fd` to path)

qsv: https://github.com/jqnatividad/qsv
```

If the optional dependencies are missing `denote-fzf-lua` falls back to standard Unix tools. The Rust tools are 2-3x faster. On my PC this is a difference of 0.1s vs 0.2s for 10k notes, or 0.6s vs 1.9s for 100k notes.

`qsv` is used over the smaller, more ubiquitous `xsv` because it can table format very large inputs (e.g. 100k notes) without errors.

# :DenoteSearch command

```vim
" Searches filenames in `dir` with fzf and displays results as a table
:DenoteSearch files

" Standard rg search through file contents in `dir`.
" Nothing special about this, it's just a convenient command that uses the same fzf-lua options
:DenoteSearch contents
```

# License

GNU AGPL (`fzf-lua` license)