blog/content/posts/2024-11-17-obsidian.md

11 KiB
Raw Permalink Blame History

+++ title = "Obsidian" description = "" date = 2024-11-17T22:30:37+03:00 categories = [ "Без рубрики" ] tags = ['it', 'joplin', 'obsidian'] location = "Казань" +++

Некоторое время назад я писал про заметочник Joplin.

С тех пор мои вкусы несколько поменялись и я открыл для себя его величество Obsidian.

Obsidian logo

В целом он такой же заметочник, с ± тем же функционалом, но имеет для меня одну особенность, которая буквально переворачивает всё. Это мощнейшая система плагинов. Серьёзно, я нашел плагины которые покрывают для меня всё, кроме одного (но об этом позже).

Что такое Obisidian?

Obsidian представляет собой приложение для ведения персональных баз данных, основанное на принципах локальных файлов Markdown. Это значит, что ваши данные хранятся в виде обычных текстовых файлов, что обеспечивает максимальную гибкость и независимость от облачных сервисов.

Приложение работает на операционных системах: Windows, macOS, Linux, iOS, Android.

Основные функции и преимущества

  1. Граф связей — да, он есть уже много где, но нельзя его не упомянуть.
  2. Markdown — очень приятно, что все заметки хранятся в Markdown, что обеспечивает максимальную интероперабельность и переносимость
  3. Плагины — плагины пишутся на JS/TS и их много. Даже не так, их МНОГО. Что приятно, они скачиваются и лежат в той же директории что и основное хранилище, а это важно для следующего пункта
  4. Синхронизация — она есть. Но вроде как платная. Но мне это и не интересно, я использую Syncthing. Просто шарю через него директорию хранилища по схеме оба ноутбука <-> NAS <-> Android. При этом синкаются все плагины и настройки.
  5. Скорость — не смотря на то, что он написан на проклятом электроне, работает достаточно шустро, претензий нет.
  6. Доска для рисования — мелочь, конечно, но удобно, когда надо на скорую руку накидать небольшую схемку. В конце этого поста как раз есть пример такой схемки.

Минусы

  1. Проприетарность — Obsidian хоть и в целом бесплатный, но он не свободный и даже не opensource. Да, это серьёзный минус, но он компенсируется тем, что хотябы вся база данных не в проприетарном формате. И в случае чего можно будет с наименьшими проблемами свалить куда-нибудь.
  2. Electron — ну это скорей мой личный пунктик. Но при этом приходиться смиряться с электроном что на Obsidian что на VSCode (VSCodium, конечно же), потому что лучше-то и нет.

Это только то, что сейчас пришло в голову.

А теперь самое вкусное

Не помню, я упоминал что у него много плагинов? :)

Так вот, поехали, мои самые любимые:

Dataview

https://blacksmithgu.github.io/obsidian-dataview/

Ну это просто must-have плагин, который позволяет обращаться с вашими заметками именно как с базой данных, не меньше.

Например, можно создать новый документ, написать в него

    ```dataview
    TASK
    WHERE status = " "
    ```

и волшебным образом вместо этого блока появятся все невыполненные задачи, а вот так

    ```dataview
    TASK
    WHERE status = "x"
    ```

мы получим все выполненные.

Язык запросов очень мощный, в нём сто́ит разобраться.

Ещё есть возможность делать однострочные запросы, например, в домашней заметке (которая у меня открывается по умолчанию) у меня есть ссылка на именно сегодняшнюю заметку ежедневного журнала. Сделано вот так:

`=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);
}
%>

## Задачи
___
<%
`- [ ]`
%>

## Заметки
___

и переходя к сегодняшней заметке я сразу получаю такую заготовку:

Остальные плагины

Остальные тоже крутые, но я их приведу просто списком:

  • obsidian-tasks-plugin — помогает более богато управлять задачами. В частности, у меня проставляет дату завершения задачи, и проставляет даты дедлайна и прочее.
  • obsidian-reminder-plugin — трекает и напоминает про задачи
  • calendar — просто миникалендарь в боковой панели
  • homepage — позволяет задать произвольную заметку "домашней"
  • obsidian-icon-folder — позволяет задавать директориям и заметкам произвольные иконки. Пример есть как раз на скриншоте выше.
  • pomodoro-timer — думаю, из названия и так понятно

А что же мне не хватает?

Я упомянул выше что мне кое чего не хватает. А именно, постить заметку в мой блог по протоколу Micropub.

Только из-за Obsidian и того, что он использует Markdown я опять вернулся на Hugo, который так же рендерится из Markdown.

«Но Hugo это же генератор статичных сайтов, куда ты ему будешь отправлять заметку для публикации?» — можешь спросить меня ты. А я отвечу что у меня вот такой план:

план-кабан

То что выделено красным — ещё не существует в природе.

micropub сервер для hugo я уже начал писать. Да, есть nanopub сервер, но у него есть два серьёзных недостатка, это PHP и то что его сделал не я.

micropub плагин для obsidian я вижу сделать на основе существующего плагина rest-publish. Ну или как пойдёт.

В общем, меня ждёт ещё очень много весёлого дрочева с этим всем.

Закругляюсь

Пожалуй, пока на этом всё. Поделился как радостью использования Obsidian, так и планами на пет-проекты, что ещё надо-то?

Если что, пишите комментарии. Лучше всего здесь, но можно и во всяких телеграмах-вкшках.