Obsidian
Некоторое время назад я писал про заметочник Joplin.
С тех пор мои вкусы несколько поменялись и я открыл для себя его величество Obsidian.
В целом он такой же заметочник, с ± тем же функционалом, но имеет для меня одну особенность, которая буквально переворачивает всё. Это мощнейшая система плагинов. Серьёзно, я нашел плагины которые покрывают для меня всё, кроме одного (но об этом позже).
Что такое Obisidian? ¶
Obsidian представляет собой приложение для ведения персональных баз данных, основанное на принципах локальных файлов Markdown. Это значит, что ваши данные хранятся в виде обычных текстовых файлов, что обеспечивает максимальную гибкость и независимость от облачных сервисов.
Приложение работает на операционных системах: Windows, macOS, Linux, iOS, Android.
Основные функции и преимущества ¶
- Граф связей — да, он есть уже много где, но нельзя его не упомянуть.
- Markdown — очень приятно, что все заметки хранятся в Markdown, что обеспечивает максимальную интероперабельность и переносимость
- Плагины — плагины пишутся на JS/TS и их много. Даже не так, их МНОГО. Что приятно, они скачиваются и лежат в той же директории что и основное хранилище, а это важно для следующего пункта
- Синхронизация — она есть. Но вроде как платная. Но мне это и не интересно, я использую Syncthing. Просто шарю через него директорию хранилища по схеме оба ноутбука <-> NAS <-> Android. При этом синкаются все плагины и настройки.
- Скорость — не смотря на то, что он написан на проклятом электроне, работает достаточно шустро, претензий нет.
- Доска для рисования — мелочь, конечно, но удобно, когда надо на скорую руку накидать небольшую схемку. В конце этого поста как раз есть пример такой схемки.
Минусы ¶
- Проприетарность — Obsidian хоть и в целом бесплатный, но он не свободный и даже не opensource. Да, это серьёзный минус, но он компенсируется тем, что хотябы вся база данных не в проприетарном формате. И в случае чего можно будет с наименьшими проблемами свалить куда-нибудь.
- Electron — ну это скорей мой личный пунктик. Но при этом приходиться смиряться с электроном что на Obsidian что на VSCode (VSCodium, конечно же), потому что лучше-то и нет.
Это только то, что сейчас пришло в голову.
А теперь самое вкусное ¶
Не помню, я упоминал что у него много плагинов? :)
Так вот, поехали, мои самые любимые:
Dataview ¶
https://blacksmithgu.github.io/obsidian-dataview/
Ну это просто must-have плагин, который позволяет обращаться с вашими заметками именно как с базой данных, не меньше.
Например, можно создать новый документ, написать в него
```dataview
TASK
WHERE status = " "
```
и волшебным образом вместо этого блока появятся все невыполненные задачи, а вот так
```dataview
TASK
WHERE status = "x"
```
мы получим все выполненные.
Язык запросов очень мощный1, в нём сто́ит разобраться.
Ещё есть возможность делать однострочные запросы, например, в домашней заметке (которая у меня открывается по умолчанию) у меня есть ссылка на именно сегодняшнюю заметку ежедневного журнала. Сделано вот так:
`=link(dateformat(date(today), "yyyy.MM.dd"))`
Templater ¶
https://silentvoid13.github.io/Templater/
Этот плагин позволяет мне задать некоторым директориям умолчальный шаблон. Например, вот такой у меня шаблон для ежедневных журналов:
<%*
try {
// Получаем имя текущей ежедневной заметки
const noteName = tp.file.title;
// Разбиваем полученное имя на компоненты даты
const [year, month, day] = noteName.split('.').map(Number);
// Создаём объект Date на основе поученных компонентов
const currentNoteDate = new Date(year, month - 1, day);
// Вычисляем предыдущий и следующий день
let previousDayDate = new Date(currentNoteDate.setDate(currentNoteDate.getDate() - 1));
let nextDayDate = new Date(currentNoteDate.setDate(currentNoteDate.getDate() + 2));
// Форматируем дату обратно в "DD-MM-YYYY"
const formatDate = (date) => {
const dd = String(date.getDate()).padStart(2, '0');
const mm = String(date.getMonth() + 1).padStart(2, '0');
const yyyy = date.getFullYear();
return `${yyyy}.${mm}.${dd}`;
};
const previousDay = formatDate(previousDayDate);
const nextDay = formatDate(nextDayDate);
// Формируем ссылки
const baseFolder = tp.file.folder(true);
const previousNotePath = `${baseFolder}/${previousDay}.md`;
const nextNotePath = `${baseFolder}/${nextDay}.md`;
// Выводим даты в виде ссылок
tR += `← [[${previousNotePath}|${previousDay}]] | [[${nextNotePath}|${nextDay}]] →`;
} catch (error) {
console.error("Templater Error:", error);
}
%>
## Задачи
___
<%
`- [ ]`
%>
## Заметки
___
и переходя к сегодняшней заметке я сразу получаю такую заготовку:
Остальные плагины ¶
Остальные тоже крутые, но я их приведу просто списком:
- tasks — помогает более богато управлять задачами. В частности, у меня проставляет дату завершения задачи, и проставляет даты дедлайна и прочее.
- reminder — трекает и напоминает про задачи
- calendar — просто миникалендарь в боковой панели
- homepage — позволяет задать произвольную заметку «домашней»
- icon-folder — позволяет задавать директориям и заметкам произвольные иконки. Пример есть как раз на скриншоте выше.
- pomodoro-timer — думаю, из названия и так понятно
- kanban — шикарнейший канбан плагин
А что же мне не хватает? ¶
Я упомянул выше что мне кое чего не хватает. А именно, постить заметку в мой блог по протоколу Micropub.
Только из-за Obsidian и того, что он использует Markdown я опять вернулся на Hugo, который так же рендерится из Markdown.
«Но Hugo это же генератор статичных сайтов, куда ты ему будешь отправлять заметку для публикации?» — можешь спросить меня ты. А я отвечу что у меня вот такой план:
graph TB
b1["Заметка в Obsidian"]
b2["Плагин obsidian-micropub"]
b3["micropub сервер на моем сервере"]
b4["вызов hugo"]
b5["Загрузка или копирование результата на веб сервер"]
b1 --> |Publish в контекстном меню| b2
b2 --> |POST neonxp.ru/micropub| b3
b3 --> |Запись в директорию content блога| b4
b4 --> |hugo рендерит markdown -> html| b5
style b1 fill:#28252e, stroke:#754fcc
style b2 fill:#2e2121, stroke:#c81319
style b3 fill:#2e2121, stroke:#c81319
style b4 fill:#222c2c, stroke:#20acaa
style b5 fill:#222c2c, stroke:#20acaa
То что выделено красным — ещё не существует в природе.
micropub сервер для hugo я уже начал писать. Да, есть nanopub сервер, но у него есть два серьёзных недостатка, это PHP и то что его сделал не я.
micropub плагин для obsidian я вижу сделать на основе существующего плагина rest-publish. Ну или как пойдёт.
В общем, меня ждёт ещё очень много весёлого дрочева с этим всем.
Закругляюсь ¶
Пожалуй, пока на этом всё. Поделился как радостью использования Obsidian, так и планами на пет-проекты, что ещё надо-то?
Если что, пишите комментарии. Лучше всего здесь, но можно и во всяких телеграмах-вкшках.