Thanks for creating org-roam and improving it on a daily basis!
It would probably be a good idea to modularise
org-roam--extract-links. Especially the part that identifies and handles the link types. So anyone can write a package as an extension that creates additional links without affection org-roam itself. Maybe a custom variable that holds a list of functions of link types and properties.
Custom link types could be able to set the default columns (from, to, but probably also add columns to the link table or store values in a meta column. Or add its own table to store the data there.
Of course there also needs to be a way to change the behavior for those links in the side buffer.
More use case derived after checking out the features in Luhmanns Zettelkasten (unfortunately only in German) by
- having a look at the actual Zettels (notes), which are available online (niklas-luhmann-archiv.de). So far mostly Zettels from the ZK1 are scanned and transcribed. Zettels from ZK2, which he started later on and is a bit more advanced, are unfortunately not available yet. But some are shown and discussed in the videos and the article.
- reading an article about the Zettelkasten on the same page
- watching two videos about the Zettelkasten (1, 2)
Luhmann used 6 (that’s my conclusion) types of Zettels and they really make sense:
- Notizzettel (note) - 75.000
- Bibliographiezettel (bibliography note) - 18.000 In ZK1 there are multiple references on one note and multiple notes in sucession. In ZK2 there is one title per note. He placed those bibliography notes in a separate part and of course linked to them from other notes.
- Schlagwortregisterzettel (tags note) - 307 A collection of tags in alphabetical order (tags, keywords) with links to notes. Luhmann has noted a maximum of four references per keyword. The reason for that is that he only linked to sort of entry notes. From that note he was able to dive deeper. He had 4.450 tags (crazy).
- Sammelverweiszettel (index or reference note) - ? At the beginning of a topic there are notes referring to a number of other notes (link includes a term/topic/tag). These reference notes offer the possibility of indexing from one point numerous notes in the collection that are related to a specific topic.
- Literaturzettel (readings, literature or research note) - ? Almost identical to the index note. But instead of references to other notes it is a list of books etc. to read placed at the beginning of a topic.
- Gliederungszettel (outline note) - ? Several aspects to be dealt with which refer to a correspondingly designated note. Those notes are once again placed at the beginning of a topic. The aspects are in a certain order/structure and more aspects are added over time.
1, 2 and 5 can be handled with org-roam as it is. The other type of notes would be doable by using custom link types.
Tags note (tags links)
To apply what Luhmann does to org-roam it could be just org headings (this has the advantage to mark tags or link headings with keywords like TODO or NEXT or set the archive tag):
* Knowledge Management ** [[roamTag:20200518125141-zettelkasten.org][Zettelkasten]] * Learning ** [[roamTag:20200309214122-how_to_learn.org][How to Learn]] ** [[roamTag:20200310091708-learning_how_to_learn.org][Learning How To Learn]]
And then I could write a package that identifies those tag links and uses ivy to show completions for this index note as follows :
Knowledge Management > Zettelkasten Learning > How to Learn Learning > Learning How to Learn
To keep it as simple as possible it uses the heading (or outline path if more than one heading) above the link as tag. It would be possible to even show more levels of related notes:
Knowledge Management > Zettelkasten Knowledge Management > Zettelkasten > (bib) schmidt_zettelkasten_2016 Knowledge Management > Zettelkasten < Zetteltypen Knowledge Management > Zettelkasten < Zetteltypen < Notizzettel Knowledge Management > Zettelkasten < Zetteltypen < Bibliographiezettel Knowledge Management > Zettelkasten < Zetteltypen < Schlagwortregisterzettel ...
Such tag notes could be placed anywhere. Also embedded in a normal note.
Index note (index links)
Almost the same as the tags. But another style of link that can include a word/subject like in the proposed link-tags feature and/or the title of the target note. So they don’t rely on a heading structure. If no term is included, it is of course just the title of the linked note.
It’s sort of up to the user how those links are used (which is great):
- [[roamIndex:20200309214122-how_to_learn.org][Learning » How to Learn]] - [[roamIndex:20200309214122-how_to_learn.org][» How to Learn]] * [[roamIndex:20200309214122-how_to_learn.org][Learning » How to Learn]] * Learning [[roamIndex:20200309214122-how_to_learn.org][» How to Learn]]
Of course there also would be an ivy/helm interface.
Outline note (outline links)
An outline is used to have an outflow of the Zettelkasten (Building Blocks of a Zettelkasten, How I use Outlines to Write Any Text). Not sure if this is what Luhmann did with those notes, but it makes sense.
The outline can be a simple list with links to notes, but usually grows into a structured list using headings. During the creation of the outline, gaps will appear, which will be filled with research and further notes.
Special about outline links is that they should offer a possibility to include/embed (#317 [Wishlist] Enable embedding blocks) the text of the linked notes.
So those outline links can be used and then there is a functionality to embed the content below the link.
* TODO Zettelkasten [0/3] [[roamOutline:/home/hubisan/org-roam/20200518125141-zettelkasten.org][§Zettelkasten]] ** TODO Zetteltypen [0/7] [[roamOutline:/home/hubisan/org-roam/20200523174853-zetteltypen.org][§Zetteltypen]] *** NEXT Notizzettel [[roamOutline:/home/hubisan/org-roam/20200524091229-notizzettel.org][§Notizzettel]] *** TODO Bibliographiezettel [[roamOutline:/home/hubisan/org-roam/20200524091520-bibliographiezettel.org][§Bibliographiezettel]] *** TODO ... ** TODO Verweistypen [0/0] [[roamOutline:/home/hubisan/org-roam/20200524225656-verweistypen.org][§Verweistypen]] ** TODO ... [0/0]
Hope this makes sense.