summaryrefslogtreecommitdiff
path: root/content/posts/2025-11-23-org/index.md
blob: 481b9f679559a0a13b032d2604fcd1f2745b91f4 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
---
comments: true
date: "2025-11-23"
tags:
    - гиковское
    - моё
title: Личный органайзер
---

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

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

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

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

<!--more-->

К счастью, я вспомнил что у меня же 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`. Это, на самом деле, из всех
  хотелок самая приоритетная для меня сейчас.

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