Назад к проектам

Ābele

Obsidian-плагин дающий суперсилы

6 min
github

Obsidian.md - потрясающий инструмент. Он даёт всё необходимое, а главное - ничего лишнего, чтобы фокусироваться на содержимом своих записей, и при этом создавать из них нечто большее, чем просто отдельные заметки. Секрет в системе связей, wiki-links, которая работает лучше тегов и вложенных папок, и в использовании самого простого способа хранения данных - markdown файлов.

Однако будучи идеальной основой, Obsidian в чистом виде не ощущается как законченный продукт. Таковым его делает экосистема плагинов.

Зачем ещё один плагин

На момент написания этой заметки, Obsidian насчитывает почти 3000 плагинов в своём "сторе". Среди них есть те, без которых сложно обойтись, такие как Excalidraw, дающий возможность строить графики, схемы, рисовать и визуально выражать свои мысли.

Но также obsidian-комьюнити написало за последние годы плагины, добавляющие такие базовые вещи, как задачи, календари, "базы данных", шаблоны и тд. Некоторые из них являются очень серьёзными, проработанными продуктами. Но всех их объединяет одна проблема - это пазл, который каждый собирает по-своему, а его частицы из разных комплектов.

Не то, чтобы разные плагины плохо работали вместе. Они неплохо друг друга дополняют, и каждый может найти что-то под свой workflow. Но ставя десятки разных плагинов под свои задачи, я только больше убеждался, насколько лучше они могли бы работать, насколько более консистентным и эффективным было бы это решение, если бы они были единым продуктом.

Я думаю, что можно. Поэтому я и сделал Ābele.

Возможности

Я написал Ābele на основе другого своего плагина, который постепенно развивал в течение нескольких лет, подстраивая его под свои задачи. Постепенно становилось понятно, что мой workflow далеко не уникальный и если немного обобщить плагин, то он может быть полезен большому количеству пользователей, использующих Obsidian для тех же целей, что и я - как систему журналирования, планирования, постановки задач и ведения своей базы знаний.

В его основе лежит несколько доработанная система ссылок. Она также основана на wiki-links и полностью совместима со стандартной системой ссылок Obsidian, за тем лишь исключением, что она сквозная.

Обычные ссылки связывают две заметки между собой. В Ābele же ссылки позволяют без труда строить целую иерархию связей. Когда я пишу, например, в дневной заметке, что у меня появилась новая идея по проекту, то эта запись (а не вся дневная заметка) отображается как в заметке проекта, так и в заметке "идеи", так и в заметке всех проектов. С учётом того, что дневная заметка сама собой определяет дату, когда эта запись была сделана, в связанных заметках получается своего рода лог, хронология всех событий, связанных с ней.

Такие связи образуются через специальное property groups, в котором указываются группы (или категории) к которым относится та или иная заметка. Ābele сама находит все эти связи и выводит их список в каждой заметке. Как backlinks, только с вложенностью и контекстом.

Вот ещё пример, чтобы было понятнее. Если я пишу в журнальной заметке, что сходил в тренажёрный зал, где зал - это ссылка, то мне не надо явно прописывать связь с заметкой "спорт", эта связь уже заложена в заметке "тренажёрный зал". Или если я написал, что прочитал книгу, то в заметке её автора тоже будет эта информация, потому что книга имеет в property groups ссылку на этого автора.

Журналы

Obsidian из коробки поддерживает дневные заметки. Но моя практика показывает, что сгружать всё в одну единственную заметку за день не всегда хорошая идея. Хотя большую часть записей я веду именно в дневных заметках, что автоматически создаёт хронологию, часть этих записей лучше вести в других, но тоже дневных заметках.

Так появился концепт журналов. В Ābele можно создать сколько угодно журналов и не только дневных, но и недельных, месячных, а также ежегодных. Такая система идеально работает, когда надо полистать соседние заметки одного рода и когда постоянно надо создавать типовые периодические заметки, не задумываясь какой шаблон взять. В журналы уже зашиты и шаблоны, и быстрое перемещение между заметками одного типа, и переключение между заметками за одну дату, и, самое очевидное, связь с календарём, который тоже является частью плагина.

Задачи

Раньше для задач я пользовался связкой tasks plugin и dataview. Эти два мощных плагина давали мне всё необходимое для эффективного ведения ежедневного планирования и работы над проектами. Однако в их основе лежит, как оказалось, не самый удачный подход, который противоречит философии Obsidian. Если упрощённо, то они работают со строчками, как единицей информации, в то время как Obsidian атомарен на уровне файлов. И это порождает конфликт - приходится строить одни индексы поверх других, создавать кастомные views, вместо использования встроенных bases, и терпеть медленные обновления.

Поэтому в Ābele я выбрал другой путь, и взял за основу задач единицу информации, родную для Obsidian - заметку. Таким образом, одна задача = одной заметке. Но чтобы не создавать вручную файлы и в целом управлять задачами привычным образом, был сделан удобный интерфейс с таймлайном, шорткатами для типовых действий, индикация просроченных задач и другие привычные всем элементы управления.

Что ещё важно, в отличие от других плагинов, работающих с задачами на основе заметок, в Ābele название файла не является названием задачи. Вместо этого используется первый параграф в теле этой задачи, а заголовок файла обновляется автоматически. Сделано это намеренно, потому что когда я пишу текст задачи, логично сразу в нём проставлять ссылки на связанные заметки. Таким образом задачи идеально встраиваются в остальную систему связей и тоже отображаются "насквозь" во всех связанных заметках.

Шаблоны

Самый популярный плагин для шаблонов в Obsidian - Templater. Он даёт возможность писать JavaScript прямо в шаблонах и выполнять его при создании заметки. Но для реальных задач в нём сложно обойтись без JS, а это уже несёт угрозу безопасности. Также лично мне очень не хватает в нём иерархичности в шаблонах.

В Ābele шаблоны больше декларативные - они описывают что должно быть в заметке, а не как это сделать. Есть набор встроенных переменных для дат, названий, путей и других типовых вещей, есть возможность добавлять свои переменные. Этого хватает для абсолютного большинства случаев, а безопасность не приносится в жертву гибкости.

Кроме того, есть встроенная система типов и возможность создавать иерархию шаблонов, что очень удобно, когда их становится реально много. И исправлена проблема Templater, требующего прописывать текстовые вставки в нетекстовые поля (например, подстановку шаблона даты в поле типа дата), что ломает frontmatter.

Полезные инструменты

В дополнение к основной функциональности, я добавляю в Ābele QoF инструменты, которые в том числе помогают в миграции с одной структуры хранилища на другую. Например, Find and Replace, который позволяет массово перестраивать frontmatter, менять контент заметок, ссылки, списки и тд.

Развитие

Это далеко не всё, что я хотел реализовать в Ābele. Плагин продолжает развиваться, и в ближайшем будущем обзаведётся достаточно приватным и полностью контролируемым AI-агентом, полноценным бекендом и инструментами для работы с изображениями. Но это уже немного другая история.

Читайте также