duras 1.0.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
duras-1.0.0/LICENSE ADDED
@@ -0,0 +1,16 @@
1
+ ISC License:
2
+
3
+ Copyright (c) 2026 by Sergiy Duras https://codeberg.org/duras/duras
4
+
5
+ Permission to use, copy, modify, and/or distribute this software for
6
+ any purpose with or without fee is hereby granted, provided that the
7
+ above copyright notice and this permission notice appear in all
8
+ copies.
9
+
10
+ THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
11
+ REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12
+ MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY
13
+ SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14
+ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15
+ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
16
+ OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
duras-1.0.0/PKG-INFO ADDED
@@ -0,0 +1,229 @@
1
+ Metadata-Version: 2.4
2
+ Name: duras
3
+ Version: 1.0.0
4
+ Summary: plain-text daily notes with optional encryption
5
+ Author: Sergiy Duras
6
+ License-Expression: ISC
7
+ Requires-Python: >=3.13
8
+ Description-Content-Type: text/markdown
9
+ License-File: LICENSE
10
+ Dynamic: license-file
11
+
12
+ # duras
13
+
14
+ [![License](https://img.shields.io/badge/license-ISC-blue)](https://opensource.org/licenses/ISC)
15
+
16
+ **Daily notes as plain text files, with search and optional encryption**.
17
+
18
+ ---
19
+
20
+ ## Model
21
+
22
+ One note per day:
23
+
24
+ ```
25
+
26
+ YYYY/MM/YYYY-MM-DD.dn
27
+
28
+ ```
29
+
30
+ Properties:
31
+
32
+ - plain UTF-8 text
33
+ - filesystem is the index
34
+ - no database, no hidden state
35
+ - atomic writes
36
+
37
+ Encrypted note:
38
+
39
+ ```
40
+
41
+ YYYY/MM/YYYY-MM-DD.dn.gpg
42
+
43
+ ````
44
+
45
+ via the [GNU Privacy Guard](https://gnupg.org/).
46
+
47
+ ---
48
+
49
+ ## Scope
50
+
51
+ Fits:
52
+
53
+ - terminal-based workflows
54
+ - grep-based retrieval
55
+ - long-lived plain text notes
56
+ - optional encryption
57
+
58
+ Not a fit:
59
+
60
+ - sync system
61
+ - GUI / rich text editor
62
+ - query engine or database
63
+
64
+ ---
65
+
66
+ ## Variants
67
+
68
+ ### duras
69
+
70
+ - system `gpg`
71
+ - no dependencies
72
+ - Unix-like systems
73
+
74
+ ### duras_ashell
75
+
76
+ - iOS [a-Shell mini](https://holzschu.github.io/a-Shell_iOS/)
77
+ - [PGPy](https://github.com/SecurityInnovation/PGPy) (pure Python)
78
+ - no external binaries
79
+ - `.asc` key handling (no keyring)
80
+ - compatible encrypted format
81
+
82
+ ---
83
+
84
+ ## Usage
85
+
86
+ ```sh
87
+ duras
88
+ duras append "note"
89
+ duras search term
90
+ ```
91
+
92
+ ---
93
+
94
+ ## Commands
95
+
96
+ ### open
97
+
98
+ ```sh
99
+ duras open
100
+ duras open -1
101
+ duras open 2026-04-19
102
+ duras open -- +7
103
+ ```
104
+
105
+ ### append
106
+
107
+ ```sh
108
+ duras append "text"
109
+ duras append -d -1 "yesterday"
110
+ cat file | duras append -
111
+ ```
112
+
113
+ `-` = stdin
114
+
115
+ ---
116
+
117
+ ## Encryption
118
+
119
+ ```sh
120
+ duras -c open
121
+ duras -c append "secret"
122
+ duras -c show
123
+ ```
124
+
125
+ Notes:
126
+
127
+ * uses system `gpg`
128
+ * append is memory-only
129
+ * editor uses temp file
130
+
131
+ ---
132
+
133
+ ## Search / tags
134
+
135
+ ```sh
136
+ duras search error
137
+ duras search todo -i
138
+ duras tags
139
+ ```
140
+
141
+ * literal match (not regex)
142
+ * encrypted notes excluded
143
+
144
+ ---
145
+
146
+ ## Listing
147
+
148
+ ```sh
149
+ duras list
150
+ duras list -n 0
151
+ duras stats
152
+ ```
153
+
154
+ Order: filename (date), not mtime.
155
+
156
+ ---
157
+
158
+ ## Export
159
+
160
+ ```sh
161
+ duras export ~/backup
162
+ duras export ~/backup --encrypt
163
+ ```
164
+
165
+ Creates archive; optional encryption avoids plaintext export.
166
+
167
+ ---
168
+
169
+ ## Dates
170
+
171
+ ```
172
+ YYYY-MM-DD absolute
173
+ 0 today
174
+ -1 yesterday
175
+ +7 future
176
+ ```
177
+
178
+ **Future dates are rejected**.
179
+
180
+ ---
181
+
182
+ ## Environment
183
+
184
+ | var | meaning |
185
+ | ------------ | -------------------------------------- |
186
+ | DURAS_DIR | notes dir (default: ~/Documents/Notes) |
187
+ | EDITOR | editor fallback: nano / vi / ed |
188
+ | DURAS_GPG_KEY | encryption recipient |
189
+
190
+ ---
191
+
192
+ ## Behavior
193
+
194
+ * one file per day
195
+ * plain + encrypted may coexist
196
+ * atomic writes
197
+ * no index layer
198
+
199
+ ---
200
+
201
+ ## Exit codes
202
+
203
+ | code | meaning |
204
+ | ---- | ---------------- |
205
+ | 0 | ok |
206
+ | 1 | error |
207
+ | 2 | not found |
208
+ | 3 | invalid input |
209
+ | 4 | external failure |
210
+
211
+ ---
212
+
213
+ ## Limits
214
+
215
+ * encrypted notes not searchable
216
+ * depends on `gpg`
217
+
218
+ ---
219
+
220
+ ## Docs
221
+
222
+ * **`man duras`**
223
+ * [https://codeberg.org/duras/duras](https://codeberg.org/duras/duras)
224
+
225
+ ---
226
+
227
+ ## License
228
+
229
+ ISC
duras-1.0.0/README.md ADDED
@@ -0,0 +1,218 @@
1
+ # duras
2
+
3
+ [![License](https://img.shields.io/badge/license-ISC-blue)](https://opensource.org/licenses/ISC)
4
+
5
+ **Daily notes as plain text files, with search and optional encryption**.
6
+
7
+ ---
8
+
9
+ ## Model
10
+
11
+ One note per day:
12
+
13
+ ```
14
+
15
+ YYYY/MM/YYYY-MM-DD.dn
16
+
17
+ ```
18
+
19
+ Properties:
20
+
21
+ - plain UTF-8 text
22
+ - filesystem is the index
23
+ - no database, no hidden state
24
+ - atomic writes
25
+
26
+ Encrypted note:
27
+
28
+ ```
29
+
30
+ YYYY/MM/YYYY-MM-DD.dn.gpg
31
+
32
+ ````
33
+
34
+ via the [GNU Privacy Guard](https://gnupg.org/).
35
+
36
+ ---
37
+
38
+ ## Scope
39
+
40
+ Fits:
41
+
42
+ - terminal-based workflows
43
+ - grep-based retrieval
44
+ - long-lived plain text notes
45
+ - optional encryption
46
+
47
+ Not a fit:
48
+
49
+ - sync system
50
+ - GUI / rich text editor
51
+ - query engine or database
52
+
53
+ ---
54
+
55
+ ## Variants
56
+
57
+ ### duras
58
+
59
+ - system `gpg`
60
+ - no dependencies
61
+ - Unix-like systems
62
+
63
+ ### duras_ashell
64
+
65
+ - iOS [a-Shell mini](https://holzschu.github.io/a-Shell_iOS/)
66
+ - [PGPy](https://github.com/SecurityInnovation/PGPy) (pure Python)
67
+ - no external binaries
68
+ - `.asc` key handling (no keyring)
69
+ - compatible encrypted format
70
+
71
+ ---
72
+
73
+ ## Usage
74
+
75
+ ```sh
76
+ duras
77
+ duras append "note"
78
+ duras search term
79
+ ```
80
+
81
+ ---
82
+
83
+ ## Commands
84
+
85
+ ### open
86
+
87
+ ```sh
88
+ duras open
89
+ duras open -1
90
+ duras open 2026-04-19
91
+ duras open -- +7
92
+ ```
93
+
94
+ ### append
95
+
96
+ ```sh
97
+ duras append "text"
98
+ duras append -d -1 "yesterday"
99
+ cat file | duras append -
100
+ ```
101
+
102
+ `-` = stdin
103
+
104
+ ---
105
+
106
+ ## Encryption
107
+
108
+ ```sh
109
+ duras -c open
110
+ duras -c append "secret"
111
+ duras -c show
112
+ ```
113
+
114
+ Notes:
115
+
116
+ * uses system `gpg`
117
+ * append is memory-only
118
+ * editor uses temp file
119
+
120
+ ---
121
+
122
+ ## Search / tags
123
+
124
+ ```sh
125
+ duras search error
126
+ duras search todo -i
127
+ duras tags
128
+ ```
129
+
130
+ * literal match (not regex)
131
+ * encrypted notes excluded
132
+
133
+ ---
134
+
135
+ ## Listing
136
+
137
+ ```sh
138
+ duras list
139
+ duras list -n 0
140
+ duras stats
141
+ ```
142
+
143
+ Order: filename (date), not mtime.
144
+
145
+ ---
146
+
147
+ ## Export
148
+
149
+ ```sh
150
+ duras export ~/backup
151
+ duras export ~/backup --encrypt
152
+ ```
153
+
154
+ Creates archive; optional encryption avoids plaintext export.
155
+
156
+ ---
157
+
158
+ ## Dates
159
+
160
+ ```
161
+ YYYY-MM-DD absolute
162
+ 0 today
163
+ -1 yesterday
164
+ +7 future
165
+ ```
166
+
167
+ **Future dates are rejected**.
168
+
169
+ ---
170
+
171
+ ## Environment
172
+
173
+ | var | meaning |
174
+ | ------------ | -------------------------------------- |
175
+ | DURAS_DIR | notes dir (default: ~/Documents/Notes) |
176
+ | EDITOR | editor fallback: nano / vi / ed |
177
+ | DURAS_GPG_KEY | encryption recipient |
178
+
179
+ ---
180
+
181
+ ## Behavior
182
+
183
+ * one file per day
184
+ * plain + encrypted may coexist
185
+ * atomic writes
186
+ * no index layer
187
+
188
+ ---
189
+
190
+ ## Exit codes
191
+
192
+ | code | meaning |
193
+ | ---- | ---------------- |
194
+ | 0 | ok |
195
+ | 1 | error |
196
+ | 2 | not found |
197
+ | 3 | invalid input |
198
+ | 4 | external failure |
199
+
200
+ ---
201
+
202
+ ## Limits
203
+
204
+ * encrypted notes not searchable
205
+ * depends on `gpg`
206
+
207
+ ---
208
+
209
+ ## Docs
210
+
211
+ * **`man duras`**
212
+ * [https://codeberg.org/duras/duras](https://codeberg.org/duras/duras)
213
+
214
+ ---
215
+
216
+ ## License
217
+
218
+ ISC
@@ -0,0 +1 @@
1
+ from .core import VERSION