• This repository has been archived on 23/Mar/2023
  • Stars
    star
    704
  • Rank 64,316 (Top 2 %)
  • Language
    Lua
  • License
    Other
  • Created about 3 years ago
  • Updated over 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

The power of trees at your fingertips.

Deprecation and archive notice

This project is now deprecated. I decided that having so many great features in a single editor is not the right way to write software, and I wanted to do something different outside of Neovim. There are many other Neovim Lua plugin alternatives out there.

Thanks for having used mind.nvim!

mind.nvim

Install

This plugin is a new take on note taking and task workflows. The idea is derived from using several famous plugins, such as org-mode or even standalone applications, like Notion, and add new and interesting ideas.

Motivation

Mind is an organizer tool for Neovim. It can be used to accomplish and implement a wide variety of workflows. It is designed to quickly add items in trees. Why a tree? Well, list of things like TODO lists are great but they lack the organization part. Most of them can be gathered in “lists of lists” — you probably have that on your phone. A list of list is basically a tree. But editing and operating a list of list is annoying, so it’s better to have a tool that has the concept of a node and a tree as a primitive.

Mind trees can be used to implement workflows like:

  • Journaling. Have a node for each day, which parent will be the month, which parent will be the year, etc.
  • Note taking. You are in the middle of a meeting and you heard something important? Don’t write that in a Markdown document in your ~/documents that is probably alreaddy a mess: open your Mind tree and add it there!
  • “Personal wiki.” Because of the nature of a tree, it is convenient to organize your personal notes about your work services, other teams’ products, OKRs, blablabla by simply creating trees in trees!
  • Task management. Why not having a tasks tree with three or four sub-trees for your backlog, on-going work, finished work and cancelled tasks? It’s all possible!

The possibilities are endless.

Features

Mind features two main concepts; global trees and local trees:

  • A global tree is a tree that is unique to your machine / computer. Opening your main Mind tree from Neovim will always open and edit that tree. It’s basically your central place for your Mind nodes.
  • A local tree is a tree that is relative to a given directory. Mind implements a cwd-based local form of tree, so you can even share those trees with other people (as long as they use Mind as well).

Atop of that, Mind has the concept of “project” trees, which are either a global tree, or a local tree. A global project tree is stored at the same place as your main tree and the purpose of such a tree is to be opened only when your cwd is the same as the tree, but you don’t want the tree to be in the actual cwd. That can be the case if you work on a project where you don’t want to check the tree in Git or any versioning system.

On the other side, a local project tree is what it means: it lives in the cwd, under .mind, basically.

Besides that, Mind allows you to manipulate trees and nodes. Feature set:

  • Everything is interactive and relies on the most recent features of Neovim, including vim.ui.input and vim.ui.select. Very few dependencies on other plugins, so you can customize the UI by using the plugins you love.
  • Cursor-base interaction. Open a tree and start interacting with it!
    • Expand / collapse nodes.
    • Add a node to a tree by adding it before or after the current node, or by adding it inside the current node at the beginning or end of its chilren.
    • Rename the node under the cursor.
    • Change the icon of the node under the cursor.
    • Delete the node under the cursor with a confirmation input.
    • Select a node to perform further operations on it.
    • Move nodes around!
    • Select nodes by path! — e.g. /Tasks/On-going/3345: do this
  • Supports user keybindings via keymaps. Keymaps are namespaced keybindings. They keymaps are fixed and defined by Mind, and users can decide what to put in them. For instance, you have the default keymap for default navigation, selection keymap for when a node is selected, etc. etc.
  • Nodes are just text, icons and some metadata by default. You can however decide to associate them with a data file, for which the type is user-defined (by default Markdown), or you can turn them into URL nodes.
  • A data node will open its file when triggered.
  • A URL node will open its link when triggered.
  • A well documented Lua API to create your own automatic workflow that don’t require user interaction!
  • More to come!

Getting started

This section will guide you through the list of steps you must take to be able to get started with Mind.

Prerequisites

This plugin was written against Neovim 0.7.2, so you need to ensure you are running Neovim 0.7.2 or higher.

Lua dependencies:

  • plenary.nvim, which can be required with 'nvim-lua/plenary.nvim'.

Installation

This installation guide uses packer.nvim but the procedure should be quite similar for other package managers.

use {
  'phaazon/mind.nvim',
  branch = 'v2.2',
  requires = { 'nvim-lua/plenary.nvim' },
  config = function()
    require'mind'.setup()
  end
}

This will bring you a default experience. Feel free to customize later the setup invocation (:h mind.setup).

Important note about versioning

This plugin implements SemVer via git branches and tags. Versions are prefixed with a v, and only patch versions are git tags. Major and minor versions are git branches. You are very strongly advised to use a major version dependency to be sure your config will not break when Mind gets updated.

  • Major versions always have the form vM, where M is the major version. — e.g. v2.
  • Minor versions always have the form vM.N, where M is the major version and N the minor. — e.g. v2.0.
  • Patch versions always have the form vM.N.P, where M is the major version, N the minor and P the patch. — e.g. v2.0.0.

It is strongly discouraged to use master as that branch can introduce breaking changes at any time.

Nightly users

Mind supports nightly releases of Neovim. However, keep in mind that if you are on a nightly version, you must be on the last one. If you are not, then you are exposed to Neovim compatibility issues / breakage.

Usage

A wiki is planned, but for now, you can simply have a look at :h mind-usage and :h mind-commands.

Keybindings

The user commands defined by Mind are mapped to no keybindings by default. However, once you have a tree open, buffer-local keybindings are automatically inserted. You can change them by setting they behavior you want in opts.keymaps. More information about that in :h mind-config-keymaps.

More Repositories

1

hop.nvim

Neovim motions on speed!
Lua
2,121
star
2

luminance-rs

Type-safe, type-level and stateless Rust graphics framework
Rust
1,073
star
3

this-week-in-neovim-contents

Contents of weekly news delivered by this-week-in-neovim.org.
261
star
4

warmy

Hot-reloading loadable and reloadable resources
Rust
210
star
5

this-week-in-neovim.org

this-week-in-neovim.org official webapp repository
Rust
183
star
6

glsl

GLSL parser for Rust
Rust
180
star
7

splines

Interpolation made easy.
Rust
131
star
8

spectra

Rust demoscene engine (currently on hold)
Rust
124
star
9

luminance

Type-safe, type-level and stateless Haskell graphics framework
Haskell
110
star
10

shades

Rust EDSL for shading languages
Rust
66
star
11

config

My main configuration files
Lua
65
star
12

cargo-sync-readme

Generate a Markdown section in your README based on your Rust documentation
Rust
55
star
13

toodoux

A task manager based on taskwarrior
Rust
51
star
14

mind

The power of trees at your fingertips
Rust
42
star
15

notisys.nvim

System-wide notifications for Neovim
Lua
40
star
16

do-notation

The Haskell’s do notation brought to Rust
Rust
39
star
17

cheddar

The Cheddar GLSL superset language
Rust
27
star
18

spline-editor

A simple spline editor for the splines crate
Rust
24
star
19

wavefront

Haskell Wavefront OBJ loader library
Haskell
19
star
20

bidule

Very simple and Rust FRP crate
Rust
18
star
21

poesie.nvim

Lua
16
star
22

stack-haddock-upload

A little script to upload documentation to Hackage within a stack-powered project
Shell
14
star
23

learn-luminance

11
star
24

luminance-gl-rs

DEPRECATED luminance-gl has been moved into https://github.com/phaazon/luminance-rs
Rust
11
star
25

celeri-remoulade

The Undead Sceners PC demo for Evoke 2016
Rust
10
star
26

smoothie

Smooth curves via several interpolation modes
Haskell
10
star
27

advent-of-code-2k18

https://adventofcode.com/2018
Rust
9
star
28

phaazon.net

Source code of phaazon.net.
Rust
8
star
29

kak-tree-sitter

tree-sitter meets Kakoune
Rust
8
star
30

try-guard

A guard! macro inspired by the guard Alternative function from Haskell.
Rust
6
star
31

luminance-samples

Luminance samples
Haskell
6
star
32

monad-journal

Pure logger typeclass and monad transformer
Haskell
6
star
33

outline-2017-invitro

Outline 2017 Invitation, by DESiRE and The Undead Sceners (code by @phaazon)
Rust
6
star
34

quaazar

Realtime 3D engine
Haskell
6
star
35

pixels-of-life

A GPU accelerated version of Conway’s Game of Life
Rust
5
star
36

save-z0r

Because those loops are too epic to let them go!
Rust
5
star
37

hsFModEx

FModEx Haskell API. Discontinued.
Haskell
4
star
38

hid

Haskell interface to hidapi
Haskell
4
star
39

any-cache

Cache with any key and any associated value
Rust
4
star
40

zero

Semigroups with absorbing element
Haskell
4
star
41

lightning-road-to-liquid-radiator

Official source code of Lightning Road To Liquid Radiator
C++
4
star
42

lqducul

Rust
4
star
43

cheddar-edit

A shader-toy-like project that aims to shader rapid prototyping
Rust
4
star
44

msi-kb-backlit

A command line tool to change backlit colors of your MSI keyboard
Haskell
3
star
45

reactant

FRP Haskell library
Haskell
3
star
46

non-empty

Efficient non-empty vectors in Rust
Rust
3
star
47

al

Haskell OpenAL raw binding
Haskell
3
star
48

glsl-quasiquote

The glsl! procedural macro for the glsl crate.
3
star
49

awoo

Rust
3
star
50

html-entities

Rust html entities utility functions
Rust
2
star
51

brainfarts

Pets de cerveaux.
2
star
52

kwak

The (in)famous bot you all love on IRC! (see her in action in #demofr@freenode)
Rust
2
star
53

luminance-windowing

Common windowing code for luminance (not an actual backend)
2
star
54

event

Monoidal, monadic and first-class events.
Haskell
2
star
55

par-soeur

Run away, nothing to see here!
Rust
2
star
56

advent-of-code-2021

https://adventofcode.com/
Rust
2
star
57

luminance-glutin

glutin support for luminance
Rust
2
star
58

proc-macro-faithful-display

A more faithful Display for proc-macro token types.
Rust
2
star
59

thunk

Some research project of mine about sharing thunks in Rust
Rust
2
star
60

tellbot

IRC bot with account simple tasks and tells function
Haskell
2
star
61

inject-function

Haskell package that lets you write regular functions with the extra feature to be able to inject parameters that can be shared over function composition
Haskell
2
star
62

leaf

A simple portfolio generator
Haskell
2
star
63

rust-gl-toy

As I’m learning rust, let’s play with OpenGL and GLFW here ;)
Rust
1
star
64

igl

Indexed OpenGL; a safer OpenGL implementation
Haskell
1
star
65

algo

Some famous algorithms, written with fun
Rust
1
star
66

conal_frp

An experiment at implementing FRP as described by its father, Conal Elliott. Paper here http://conal.net/papers/push-pull-frp/push-pull-frp.pdf
Haskell
1
star
67

heat-station

Official source code of Heat Station
C++
1
star
68

chronos

Simple FRP timeline. Designed to be used for demoscene purposes
Haskell
1
star
69

luminance-glfw

GLFW support for luminance
1
star
70

skp

skp D framework
D
1
star
71

advent-of-code-2020

Haskell
1
star
72

gltf

Haskell GLTF loader
Haskell
1
star
73

aur

All packages I maintain in AUR
Shell
1
star
74

codingame-unleash-the-geek

My contribution to Unleash The Geek (started on 7th of October 2019)
Rust
1
star
75

meta

Demoscene framework
Perl
1
star
76

fractalis

A Mandelbrot fractal viewer
C
1
star
77

leetify

Leetify some text!
Haskell
1
star
78

agui

Abstract GUI
Haskell
1
star
79

impersonate

An experimental Markov chain generator that learns how to speak as if it was someone else.
Rust
1
star
80

sdffont

A tool that generates signed distance fields fontmap from font file (.ttf, and so on).
Haskell
1
star
81

hush

Demoscene soft synthesizer designed to be embedded in intros.
Rust
1
star
82

iutbx1-ds

IUT Bordeaux 1 Dimitri Sabadie official repository
C++
1
star
83

atoi-data-dependency

A short and fun study of data dependency and compiler optimizations
Rust
1
star
84

rcpp

A Rust implementation of the C Preprocessor
Rust
1
star
85

colorscheme-gen

A little tool to generate color scheme for urxvt session and using the Text Export option of the colorscheme web site.
Shell
1
star
86

phraskell

Fractal set viewer.
Haskell
1
star
87

blog

phaazon.net blog articles
1
star
88

advent-of-code-2022

Advent of Code 2022 solutions
Rust
1
star