--- title: Личный органайзер date: "2025-11-23" tags: - гиковское - моё --- Пришло в голову, почему бы не рассказать как у меня организован личный органайзер. Для начала стоит очертить то, какие у меня потребности от органайзера: - Вести список ежедневных, еженедельных, ежегодных, а так же, одноразовых событий - Вести быстрый список ближайших задач (ToDo список). Под быстрым, я подразумеваю то, что внести новый пункт в него я могу не дольше, чем за пару десятков секунд. Если это будет требовать бо́льших усилий, то я себя знаю: я это быстро заброшу, т.к. это станет для меня не помощью, а повинностью. - Место для быстрых заметок в формате «бесконечного текстовика». Аналогично, это должно быть под рукой в быстром доступе. Obsidian себя показал _слишком_ медленным. Настолько, что мне стало проще запоминать, чем испытывать свои нервы каждый раз, наблюдая его длительный запуск. Да, звучит на первый взгляд глупо, но у меня так: запуск Obsidian длительностью в десяток секунд окончательно отбил у меня желание вовсе запускать его. Что же делать? Искать идеальный для себя инструмент? Идеального для _себя_ точно не найду. Написать самому, ведь «яжпрограммист»? Можно, но откровенно жаль время. Что же делать-то? К счастью, я вспомнил что у меня же unix-подобная операционная система, в поставке которой огромное количество небольших программ, которые прекрасно выполняют какую-то небольшую функцию и при этом отлично стыкуются друг с другом через стандартный текстовый поток! Грешно не воспользоваться наработками гораздо более умных, чем я, программистов! # ToDo Проще всего оказалось с этим. Просто поставил себе [todo.txt](https://github.com/todotxt/todo.txt-cli). Хоть я и говорил выше, что идеального инструмента я не найду, но я тогда немного слукавил. Для ToDo этот инструмент _почти_ идеален. Всё что мне надо, кроме одного нюанса, там есть. А вот тот самый нюанс, я когда-нибудь исправлю. Возможно. Для удобства я себе в zsh добавил следующие alias: ```zsh alias t=todo.sh ``` Таким образом, чтобы добавить задачку я просто пишу `t add текст задачи`. Куда уж проще и быстрее? # Календарь Идею организации календаря я подсмотрел в программе calendar, которая идёт в комплекте с BSD системами, но не идёт в конкретно моей ОС. Да, наверняка, можно и к себе притащить, но я из спортивного интереса хотел решить задачу максимально встроенными и стандартными инструментами. Лонг стори шорт: ~/calendar.txt ``` 01-28 ДР Лены 10-18 ДР Мамы 05-24 Годовщина свадьбы 11-23 Ежегодное событие Пн 15 Еженедельный мит Пн 20-21 Чтение Вт 13 Архком Вт 15 Грумминг Вт 20-21 Чтение Ср 13 Техразвитие Ср 20-21 Чтение Чт 15 Грумминг Чт 20-21 Чтение Пт 20-21 Чтение Сб 20-21 Чтение Вс 20-21 Чтение 2025-11-19 10 клуб амбассадоров 2025-11-17 16:30-17:30 Встреча c 16:30 до 17:30 2025-11-24 10:15 Golang Техком 2025-11-24 11-12 Анализ логики состояния 2025-11-23 21 Написать в блог о своём календаре ``` Пояснения: - `mm-dd\t\tСобытие` - некие ежегодные события, у которых указаны только месяц и день месяца - `Пн\tвремя\tСобытие` - еженедельное событие. Про формат времени - будет ниже. - `yyyy-mm-dd\tвремя\tсобытие` - разовые события в конкретную дату и время. Формат времени: его я подсмотрел у формата [calendar.txt](https://terokarvinen.com/2021/calendar-txt/), то есть, запись формата `15` - это означает что событие начнётся в 15 часов, `20-21` - событие длится с 20 до 21 часа вечера. С минутами, которые не обязательны, думаю, всё понятно из примера. Формат сам по себе абсолютно не жёсткий, допускает много вольностей. Главное, всё сводится к тому, что у него 1 строка - 1 событие и сама строка состоит из 3 полей разделённых табом (в формате calendar.txt предлагается точка, для меня это показалось неприемлемым, т.к. я записываю в события и ссылки на созвоны, а ссылка включает в себя минимум одну точку) В принципе, тут уже можно было бы и остановиться и жить с просто текстовиком, но так было бы не интересно. Я написал на языке оболочки несколько полезных скриптов. Они настолько маленькие, что я просто приведу их здесь: ~/.local/bin/calendar ```sh #! /bin/sh cur=${2:-`date +%Y-%m-%d`} file=${1:-~/calendar.txt} grep \ -e "^$(date +%Y-%m-%d -d $cur)"\ -e "^$(date +%a -d $cur)"\ -e "^$(date +%m-%d -d $cur)" $file |\ sort -n -k 2 |\ cut -f2- | fold -w 80 -s ``` Собственно, это главный скрипт, который собирает для текущей (или явно указанной) даты все релевантные события, сортирует их по времени и выводит форматированным списком. Примерно так: ``` % calendar Ежегодное событие 20-21 Чтение 21 Написать в блог о своём календаре ``` На этом я не остановился, но сделал ещё парочку вспомогательных скриптов, использующих его за основу: ~/.local/bin/today ```sh #!/bin/sh echo "Календарь:" echo -e ''$_{1..80}'\b-' cal echo -e ''$_{1..80}'\b-' echo "События дня:" echo -e ''$_{1..80}'\b-' calendar echo -e ''$_{1..80}'\b-' echo "ToDo:" todo.sh ls ``` Делает по сути тоже самое что и просто calendar, только ещё и рисует красивый графический календарик и показывает список ToDo задач. ~/.local/bin/week ```sh #!/bin/sh echo "На 7 дней:" for i in {0..6} do d=`date +%Y-%m-%d -d "+ $i day"` echo -e ''$_{1..80}'\b-' echo $d echo -e ''$_{1..80}'\b-' calendar ~/calendar.txt $d done echo -e ''$_{1..80}'\b-' echo "ToDo:" todo.sh ls ``` Выводит план на 7 дней вперёд. ## Редактирование календаря Здесь тоже предельно просто: добавил в zshrc такой алиас: ```zsh alias ev='nvim +/`date +"%Y-%m-%d"` ~/calendar.txt' ``` и просто по команде `ev` открывается neovim и готов принимать новое событие. Хотя это и не самая частая операция. # Быстрые заметки Тут тоже всё просто: ```zsh alias qn='nvim "+normal G" ~/quicknote.txt' ``` Соответственно, по команде `qn` открывается мой текстовик для заметок на самой последней строке. Можно дописать или поискать что-то с конца. На самом деле очень удобно! # Мобильный? Я бы хотел все эти мои текстовики иметь и на мобильном устройстве. Даже не для редактирования, а например, свериться со списком задач / событий. Тут чуть сложнее. Для синхронизации с мобильным устройством я сделал такой финт: 1. Все текстовики у меня лежат не в домашней директории, на самом деле, а в некой директории из которой симлинками уже прокинуты в корень домашней директории. 2. Директория эта добавлена в Syncthing который синхронизирует её с NAS и мобильным устройством. 3. На мобильном устройстве стоит замечательная программа [Markor](https://f-droid.org/packages/net.gsantner.markor/) которая нативно понимает формат todo.txt, ну и достаточно неплохо позволяет смотреть редактировать файлы calendar.txt и quicknote.txt. # Чтобы хотелось ещё? - Как я упоминал, в todo.txt для меня есть неприятный нюанс который я бы хотел исправить, а именно, вложенные задачи, когда у одной задачи может быть сколько угодно дочерних, у которых, так же могут быть дочерние. Пока думаю, расширить формат табуляцией в начале строки. Количество \t - уровень вложенности. Но тогда придётся модифицировать todo.txt-cli который я использую. И непонятно как это проглотит Markor. Можно конечно использовать встроенную возможность задавать key-value значения. Тогда будет что-то типа `Подзадача parent:2`. Это, как будто, самый правильный способ, который и рекомендуется разработчиками формата, но получается слишком многословно, а даже если сократить до `p:2` - всё равно надо в голове держать номер родительской задачи. Так себе. Не знаю ещё как поступлю, но как-то поступлю. - Было бы неплохо прикрутить парсинг ICS файлов из почты для автоматического добавления событий в календарь. Это сто́ит сделать однозначно! - Ну и очень желательно сделать скрипт который по крону за 15 минут до события напомнит о нём, через какой-нибудь `notify-send`. Это, на самом деле, из всех хотелок самая приоритетная для меня сейчас. Если будет интересно, я могу здесь рассказывать о том, что сделал из этих хотелок.