Личный органайзер

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

Для начала стоит очертить то, какие у меня потребности от органайзера:

  • Вести список ежедневных, еженедельных, ежегодных, а так же, одноразовых событий
  • Вести быстрый список ближайших задач (ToDo список). Под быстрым, я подразумеваю то, что внести новый пункт в него я могу не дольше, чем за пару десятков секунд. Если это будет требовать бо́льших усилий, то я себя знаю: я это быстро заброшу, т.к. это станет для меня не помощью, а повинностью.
  • Место для быстрых заметок в формате «бесконечного текстовика». Аналогично, это должно быть под рукой в быстром доступе. Obsidian себя показал слишком медленным. Настолько, что мне стало проще запоминать, чем испытывать свои нервы каждый раз, наблюдая его длительный запуск. Да, звучит на первый взгляд глупо, но у меня так: запуск Obsidian длительностью в десяток секунд окончательно отбил у меня желание вовсе запускать его.

Что же делать? Искать идеальный для себя инструмент? Идеального для себя точно не найду. Написать самому, ведь «яжпрограммист»? Можно, но откровенно жаль время. Что же делать-то?

К счастью, я вспомнил что у меня же unix-подобная операционная система, в поставке которой огромное количество небольших программ, которые прекрасно выполняют какую-то небольшую функцию и при этом отлично стыкуются друг с другом через стандартный текстовый поток! Грешно не воспользоваться наработками гораздо более умных, чем я, программистов!

ToDo

Проще всего оказалось с этим. Просто поставил себе todo.txt. Хоть я и говорил выше, что идеального инструмента я не найду, но я тогда немного слукавил. Для ToDo этот инструмент почти идеален. Всё что мне надо, кроме одного нюанса, там есть. А вот тот самый нюанс, я когда-нибудь исправлю. Возможно.

Для удобства я себе в zsh добавил следующие alias:

1alias 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, то есть, запись формата 15 - это означает что событие начнётся в 15 часов, 20-21 - событие длится с 20 до 21 часа вечера. С минутами, которые не обязательны, думаю, всё понятно из примера.

Формат сам по себе абсолютно не жёсткий, допускает много вольностей. Главное, всё сводится к тому, что у него 1 строка - 1 событие и сама строка состоит из 3 полей разделённых табом (в формате calendar.txt предлагается точка, для меня это показалось неприемлемым, т.к. я записываю в события и ссылки на созвоны, а ссылка включает в себя минимум одну точку)

В принципе, тут уже можно было бы и остановиться и жить с просто текстовиком, но так было бы не интересно. Я написал на языке оболочки несколько полезных скриптов. Они настолько маленькие, что я просто приведу их здесь:

~/.local/bin/calendar

 1#! /bin/sh
 2
 3cur=${2:-`date +%Y-%m-%d`}
 4file=${1:-~/calendar.txt}
 5grep \
 6	-e "^$(date +%Y-%m-%d -d $cur)"\
 7	-e "^$(date +%a -d $cur)"\
 8	-e "^$(date +%m-%d -d $cur)" $file |\
 9sort -n -k 2 |\
10cut -f2- | fold -w 80 -s

Собственно, это главный скрипт, который собирает для текущей (или явно указанной) даты все релевантные события, сортирует их по времени и выводит форматированным списком. Примерно так:

% calendar               
	Ежегодное событие
20-21	Чтение
21	Написать в блог о своём календаре

На этом я не остановился, но сделал ещё парочку вспомогательных скриптов, использующих его за основу:

~/.local/bin/today

 1#!/bin/sh
 2echo "Календарь:"
 3echo -e ''$_{1..80}'\b-'
 4cal
 5echo -e ''$_{1..80}'\b-'
 6echo "События дня:"
 7echo -e ''$_{1..80}'\b-'
 8
 9calendar
10
11echo -e ''$_{1..80}'\b-'
12
13echo "ToDo:"
14todo.sh ls

Делает по сути тоже самое что и просто calendar, только ещё и рисует красивый графический календарик и показывает список ToDo задач.

~/.local/bin/week

 1#!/bin/sh
 2
 3echo "На 7 дней:"
 4for i in {0..6}
 5do
 6	d=`date +%Y-%m-%d -d "+ $i day"`
 7	echo -e ''$_{1..80}'\b-'
 8	echo $d
 9	echo -e ''$_{1..80}'\b-'
10	calendar ~/calendar.txt $d
11done
12echo -e ''$_{1..80}'\b-'
13echo "ToDo:"
14todo.sh ls

Выводит план на 7 дней вперёд.

Редактирование календаря

Здесь тоже предельно просто: добавил в zshrc такой алиас:

1alias ev='nvim +/`date +"%Y-%m-%d"` ~/calendar.txt'

и просто по команде ev открывается neovim и готов принимать новое событие. Хотя это и не самая частая операция.

Быстрые заметки

Тут тоже всё просто:

1alias qn='nvim "+normal G" ~/quicknote.txt'

Соответственно, по команде qn открывается мой текстовик для заметок на самой последней строке. Можно дописать или поискать что-то с конца. На самом деле очень удобно!

Мобильный?

Я бы хотел все эти мои текстовики иметь и на мобильном устройстве. Даже не для редактирования, а например, свериться со списком задач / событий.

Тут чуть сложнее. Для синхронизации с мобильным устройством я сделал такой финт:

  1. Все текстовики у меня лежат не в домашней директории, на самом деле, а в некой директории из которой симлинками уже прокинуты в корень домашней директории.
  2. Директория эта добавлена в Syncthing который синхронизирует её с NAS и мобильным устройством.
  3. На мобильном устройстве стоит замечательная программа Markor которая нативно понимает формат todo.txt, ну и достаточно неплохо позволяет смотреть редактировать файлы calendar.txt и quicknote.txt.

Чтобы хотелось ещё?

  • Как я упоминал, в todo.txt для меня есть неприятный нюанс который я бы хотел исправить, а именно, вложенные задачи, когда у одной задачи может быть сколько угодно дочерних, у которых, так же могут быть дочерние. Пока думаю, расширить формат табуляцией в начале строки. Количество \t - уровень вложенности. Но тогда придётся модифицировать todo.txt-cli который я использую. И непонятно как это проглотит Markor. Можно конечно использовать встроенную возможность задавать key-value значения. Тогда будет что-то типа Подзадача parent:2. Это, как будто, самый правильный способ, который и рекомендуется разработчиками формата, но получается слишком многословно, а даже если сократить до p:2 - всё равно надо в голове держать номер родительской задачи. Так себе. Не знаю ещё как поступлю, но как-то поступлю.
  • Было бы неплохо прикрутить парсинг ICS файлов из почты для автоматического добавления событий в календарь. Это сто́ит сделать однозначно!
  • Ну и очень желательно сделать скрипт который по крону за 15 минут до события напомнит о нём, через какой-нибудь notify-send. Это, на самом деле, из всех хотелок самая приоритетная для меня сейчас.

Если будет интересно, я могу здесь рассказывать о том, что сделал из этих хотелок.


Комментариев в блоге не предусмотрено, но вы всегда можете написать мне на e-mail i@neonxp.ru или в джаббер i@neonxp.ru