markora 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.
markora-1.0.0/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 zyekhabdul <zyekhabdulqadirjailani@gmail.com>
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
markora-1.0.0/PKG-INFO ADDED
@@ -0,0 +1,294 @@
1
+ Metadata-Version: 2.4
2
+ Name: markora
3
+ Version: 1.0.0
4
+ Summary: ⚡ Sovereign Markor-style Markdown Notebook, QuickNotes & Todo TUI for Terminal Power Users
5
+ Author-email: zyekhabdul <zyekhabdulqadirjailani@gmail.com>
6
+ License: MIT
7
+ Project-URL: Homepage, https://github.com/zyekhabdul/markora
8
+ Project-URL: Repository, https://github.com/zyekhabdul/markora.git
9
+ Project-URL: Issues, https://github.com/zyekhabdul/markora/issues
10
+ Project-URL: Changelog, https://github.com/zyekhabdul/markora/blob/main/CHANGELOG.md
11
+ Keywords: markora,markor,markdown,notes,notebook,todo,tui,curses,google-keep,productivity,cli,terminal
12
+ Classifier: Development Status :: 5 - Production/Stable
13
+ Classifier: Environment :: Console
14
+ Classifier: Environment :: Console :: Curses
15
+ Classifier: Intended Audience :: Developers
16
+ Classifier: Intended Audience :: End Users/Desktop
17
+ Classifier: License :: OSI Approved :: MIT License
18
+ Classifier: Operating System :: POSIX :: Linux
19
+ Classifier: Operating System :: MacOS
20
+ Classifier: Programming Language :: Python :: 3
21
+ Classifier: Programming Language :: Python :: 3.8
22
+ Classifier: Programming Language :: Python :: 3.9
23
+ Classifier: Programming Language :: Python :: 3.10
24
+ Classifier: Programming Language :: Python :: 3.11
25
+ Classifier: Programming Language :: Python :: 3.12
26
+ Classifier: Programming Language :: Python :: 3.13
27
+ Classifier: Programming Language :: Python :: 3.14
28
+ Classifier: Topic :: Text Editors
29
+ Classifier: Topic :: Utilities
30
+ Requires-Python: >=3.8
31
+ Description-Content-Type: text/markdown
32
+ License-File: LICENSE
33
+ Provides-Extra: keep
34
+ Requires-Dist: gkeepapi>=0.14.0; extra == "keep"
35
+ Requires-Dist: gpsoauth>=1.0.0; extra == "keep"
36
+ Provides-Extra: browser-auth
37
+ Requires-Dist: playwright>=1.40.0; extra == "browser-auth"
38
+ Provides-Extra: all
39
+ Requires-Dist: gkeepapi>=0.14.0; extra == "all"
40
+ Requires-Dist: gpsoauth>=1.0.0; extra == "all"
41
+ Requires-Dist: playwright>=1.40.0; extra == "all"
42
+ Provides-Extra: dev
43
+ Requires-Dist: pytest>=7.0.0; extra == "dev"
44
+ Requires-Dist: pytest-cov>=4.0.0; extra == "dev"
45
+ Requires-Dist: flake8>=6.0.0; extra == "dev"
46
+ Dynamic: license-file
47
+
48
+ <div align="center">
49
+
50
+ ```
51
+ __ __ _
52
+ | \/ | | |
53
+ | \ / | __ _ _ __| | _____ _ __ __ _
54
+ | |\/| |/ _` | '__| |/ / _ \| '__/ _` |
55
+ | | | | (_| | | | < (_) | | | (_| |
56
+ |_| |_|\__,_|_| |_|\_\___/|_| \__,_|
57
+ ```
58
+
59
+ ### ⚡ Sovereign Markor-style Markdown Notebook, QuickNotes & Todo TUI for Terminal Power Users
60
+
61
+ [![CI](https://github.com/zyekhabdul/markora/actions/workflows/ci.yml/badge.svg)](https://github.com/zyekhabdul/markora/actions/workflows/ci.yml)
62
+ [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/licenses/MIT)
63
+ [![Python: 3.8+](https://img.shields.io/badge/python-3.8+-green.svg)](https://www.python.org/downloads/)
64
+ [![Code Style: Clean](https://img.shields.io/badge/code%20style-clean-brightgreen.svg)](https://github.com/zyekhabdul/markora)
65
+
66
+ **[Features](#-key-features)** •
67
+ **[Interactive TUI](#️-interactive-curses-tui)** •
68
+ **[1-Line Install](#-installation)** •
69
+ **[CLI Reference](#-cli-command-reference)** •
70
+ **[TUI Shortcuts](#️-tui-keyboard-shortcuts)** •
71
+ **[Google Keep Sync](#-google-keep-bidirectional-sync)** •
72
+ **[Configuration](#-configuration)**
73
+
74
+ ---
75
+
76
+ </div>
77
+
78
+ ## 💡 Why Markora?
79
+
80
+ If you love the simplicity, offline-first philosophy, and markdown-native architecture of the popular Android app **[Markor](https://github.com/gsantner/markor)**, **Markora** brings that exact seamless experience straight into your terminal.
81
+
82
+ - **Zero Cloud Lock-in**: Your data is 100% plain Markdown files in `~/Documents` (or your custom directory). You own your notes forever.
83
+ - **Zero Heavy Dependencies**: Core CLI and interactive TUI run entirely on the Python 3 standard library. No Electron bloat, no node_modules, no heavy frameworks.
84
+ - **Dual Personality**: Use lightning-fast one-liner CLI commands (`markora add`, `markora qn`) for scriptability, or fire up the rich interactive 4-tab Curses TUI (`markora ui`) for browsing, editing, and task triage.
85
+ - **Seamless Portability**: Sync your folder with Syncthing, Nextcloud, Git, or Android Markor without converting formats.
86
+
87
+ ---
88
+
89
+ ## ✨ Key Features
90
+
91
+ | Feature | Description |
92
+ | :--- | :--- |
93
+ | 📝 **QuickNote / Scratchpad** | Instant timestamped brain dumps saved directly to `quicknote.md`. |
94
+ | ✅ **To-Do & Milestones** | Parse and manage markdown task lists with priorities (`P1`, `P2`, `P3`), tags (`#urgent`, `@work`), sections, and sub-items. |
95
+ | 📚 **Notebook Tree** | Hierarchical directory tree with folding/unfolding, file counts, and folder creation. |
96
+ | ⭐ **Star & Pin Favorites** | Pin your most crucial notes to the top for instantaneous access. |
97
+ | 🔍 **Global Full-Text Search** | Real-time substring and regex search across all markdown files with direct line jumping into `$EDITOR`. |
98
+ | 🖱️ **Full Mouse & Keyboard** | Click tabs, check/uncheck tasks, fold folders, and scroll panes with full terminal mouse support. |
99
+ | 🔄 **Google Keep Bridge** | Optional bidirectional sync with Google Keep (`markora keep sync`) for seamless mobile-to-desktop workflow. |
100
+
101
+ ---
102
+
103
+ ## 🖥️ Interactive Curses TUI
104
+
105
+ Launch with `markora ui` (or alias `td ui`):
106
+
107
+ ```
108
+ ┌────────────────────────────────────────────────────────────────────────┐
109
+ │ MARKORA NOTEBOOK | SSOT: TODOLIST.md │
110
+ ├────────────────────────────────────────────────────────────────────────┤
111
+ │ [1] QuickNote [2] To-Do [3] Notebook [4] Search Filter: (none)│
112
+ ├──────────────────────────────────┬─────────────────────────────────────┤
113
+ │ > [✔] # 1 [P1] Deploy core v1.0 │ Task #1 Details │
114
+ │ [ ] # 2 [P2] Write user manual │ Section : ACTIVE TASKS │
115
+ │ [ ] # 3 [P3] Refactor keep api │ Status : DONE │
116
+ │ │ Priority: P1 │
117
+ │ │ Scope: Production release │
118
+ │ │ Deliverables: Clean package │
119
+ ├──────────────────────────────────┴─────────────────────────────────────┤
120
+ │ [Space] Toggle [a] Add [r] Edit [d] Del [e] Editor [s] Sync Keep [q] │
121
+ └────────────────────────────────────────────────────────────────────────┘
122
+ ```
123
+
124
+ ---
125
+
126
+ ## 📦 Installation
127
+
128
+ ### Option 1: 1-Line Standalone Installer (Recommended)
129
+
130
+ ```bash
131
+ curl -fsSL https://raw.githubusercontent.com/zyekhabdul/markora/main/install.sh | bash
132
+ ```
133
+
134
+ This installs `markora` (and aliases `td`, `todo`, `mo`) into `~/.local/bin/`.
135
+
136
+ ### Option 2: Pip / Pipx Installation
137
+
138
+ ```bash
139
+ # Standard install (Zero external dependencies)
140
+ pip install git+https://github.com/zyekhabdul/markora.git
141
+
142
+ # With optional Google Keep synchronization
143
+ pip install "markora[keep] @ git+https://github.com/zyekhabdul/markora.git"
144
+ ```
145
+
146
+ ### Option 3: Manual Clone & Symlink
147
+
148
+ ```bash
149
+ git clone https://github.com/zyekhabdul/markora.git ~/Projects/markora
150
+ cd ~/Projects/markora
151
+ make symlink
152
+ ```
153
+
154
+ ---
155
+
156
+ ## 🚀 CLI Command Reference
157
+
158
+ All commands support both `markora` and the ultra-short alias `td`:
159
+
160
+ ```bash
161
+ # --- QuickNotes ---
162
+ td qn "Remember to review pull request" # Append thought
163
+ td qn # View quicknotes
164
+ td qn -e # Edit in $EDITOR
165
+
166
+ # --- Task Management ---
167
+ td add "Ship version 1.0" -p p1 # Add high-priority task
168
+ td add "Research new indexing" -s "Inbox" # Add to specific section
169
+ td list # List all tasks
170
+ td list -p # Show only pending tasks
171
+ td list -d # Show completed tasks
172
+ td list -t #backend # Filter by tag
173
+ td done 1 3 # Complete tasks #1 and #3
174
+ td undone 2 # Mark task #2 pending
175
+ td toggle 1 # Toggle completion status
176
+ td rm 4 # Delete task #4
177
+
178
+ # --- Markdown Notebook ---
179
+ td note "System Architecture" # Create new note in notes/
180
+ td note -d # Open today's daily note
181
+ td notes # List all notebook files
182
+ td find "authentication" # Search across all notes
183
+ td fav list # List starred notes
184
+ td fav add notes/project.md # Star a note
185
+
186
+ # --- TUI & Integrations ---
187
+ td ui # Launch interactive 4-tab TUI
188
+ td keep auth # Connect Google Keep
189
+ td keep sync # Two-way sync with Keep
190
+ ```
191
+
192
+ ---
193
+
194
+ ## ⌨️ TUI Keyboard Shortcuts
195
+
196
+ | Key | Context | Action |
197
+ | :--- | :--- | :--- |
198
+ | `1` / `2` / `3` / `4` | Global | Switch directly to Tab 1–4 |
199
+ | `Tab` | Global | Cycle to next tab |
200
+ | `j` / `k` / `↑` / `↓` | Navigation | Move cursor up / down |
201
+ | `g` / `G` | Navigation | Jump to top / bottom of list |
202
+ | `Space` / `x` | To-Do Tab | Toggle task checkbox (`[ ]` ↔ `[✔]`) |
203
+ | `a` | Global | Append QuickNote or Add To-Do task |
204
+ | `t` | QuickNote | Insert current timestamp log entry |
205
+ | `n` | Notebook | Create new `.md` note in highlighted folder |
206
+ | `N` / `m` | Notebook | Create new subfolder |
207
+ | `f` / `p` | Notebook | Star / Toggle Favorite note `[⭐]` |
208
+ | `r` / `R` | Global | Rename note/folder or edit task title |
209
+ | `d` | Global | Delete task, note, or directory (with confirmation) |
210
+ | `Enter` / `l` / `→` | Notebook | Open note in `$EDITOR` / Expand folder |
211
+ | `h` / `←` | Notebook | Collapse folder / Jump to parent folder |
212
+ | `e` | Global | Open current document in `$EDITOR` (`nvim`, `zed`, etc.) |
213
+ | `s` / `S` | Global | Trigger Google Keep bidirectional synchronization |
214
+ | `/` | Global | Live filter tree / search query |
215
+ | `Esc` | Global | Clear filter query |
216
+ | `Ctrl+R` | Global | Force reload data from disk |
217
+ | `?` | Global | Open interactive Keyboard Shortcut Help Modal |
218
+ | `q` | Global | Quit Markora |
219
+
220
+ ---
221
+
222
+ ## 🔄 Google Keep Bidirectional Sync
223
+
224
+ Markora includes a built-in sync engine that maps your Google Keep notes to your local markdown hierarchy:
225
+
226
+ - **Daily Notes** → Synced with Keep notes labeled `daily-notes`
227
+ - **QuickNote** → Synced with Keep note titled `QuickNote`
228
+ - **General Notes** → Synced with Keep notes labeled `notes`
229
+
230
+ ### How to Authenticate:
231
+
232
+ ```bash
233
+ # Install Keep dependencies
234
+ pip install "markora[keep]"
235
+
236
+ # Run interactive auth (automated browser popup or token paste)
237
+ markora keep auth
238
+
239
+ # Perform two-way sync
240
+ markora keep sync
241
+ ```
242
+
243
+ ---
244
+
245
+ ## ⚙️ Configuration
246
+
247
+ Markora respects standard Unix configuration paradigms and environment variables:
248
+
249
+ | Environment Variable | Default | Purpose |
250
+ | :--- | :--- | :--- |
251
+ | `MARKORA_NOTES_DIR` / `NOTES_DIR` | `~/Documents` | Root directory for your markdown notes |
252
+ | `MARKORA_TODO_FILE` / `TODO_FILE` | `$NOTES_DIR/TODOLIST.md` | Master todolist markdown file |
253
+ | `EDITOR` / `VISUAL` | `nvim` (fallback: `zed`, `nano`, `vi`) | Preferred text editor |
254
+
255
+ Config files are stored in `~/.config/markora/` (with automatic fallback to `~/.config/td/`).
256
+
257
+ ---
258
+
259
+ ## 🐚 Shell Completion
260
+
261
+ Shell completion scripts for Bash and Zsh are located in [`completions/`](completions/):
262
+
263
+ ```bash
264
+ # Bash
265
+ source <(cat completions/markora.bash)
266
+
267
+ # Zsh
268
+ cp completions/markora.zsh ~/.zsh/completion/_markora
269
+ ```
270
+
271
+ ---
272
+
273
+ ## 🛠️ Development & Testing
274
+
275
+ ```bash
276
+ git clone https://github.com/zyekhabdul/markora.git
277
+ cd markora
278
+
279
+ # Setup editable install with test dependencies
280
+ make dev
281
+
282
+ # Run comprehensive test suite
283
+ make test
284
+
285
+ # Lint & syntax validation
286
+ make lint
287
+ ```
288
+
289
+ ---
290
+
291
+ ## 📄 License
292
+
293
+ MIT License © 2026 [zyekhabdul](https://github.com/zyekhabdul).
294
+ Built with craftsmanship for sovereign terminal enthusiasts.
@@ -0,0 +1,247 @@
1
+ <div align="center">
2
+
3
+ ```
4
+ __ __ _
5
+ | \/ | | |
6
+ | \ / | __ _ _ __| | _____ _ __ __ _
7
+ | |\/| |/ _` | '__| |/ / _ \| '__/ _` |
8
+ | | | | (_| | | | < (_) | | | (_| |
9
+ |_| |_|\__,_|_| |_|\_\___/|_| \__,_|
10
+ ```
11
+
12
+ ### ⚡ Sovereign Markor-style Markdown Notebook, QuickNotes & Todo TUI for Terminal Power Users
13
+
14
+ [![CI](https://github.com/zyekhabdul/markora/actions/workflows/ci.yml/badge.svg)](https://github.com/zyekhabdul/markora/actions/workflows/ci.yml)
15
+ [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/licenses/MIT)
16
+ [![Python: 3.8+](https://img.shields.io/badge/python-3.8+-green.svg)](https://www.python.org/downloads/)
17
+ [![Code Style: Clean](https://img.shields.io/badge/code%20style-clean-brightgreen.svg)](https://github.com/zyekhabdul/markora)
18
+
19
+ **[Features](#-key-features)** •
20
+ **[Interactive TUI](#️-interactive-curses-tui)** •
21
+ **[1-Line Install](#-installation)** •
22
+ **[CLI Reference](#-cli-command-reference)** •
23
+ **[TUI Shortcuts](#️-tui-keyboard-shortcuts)** •
24
+ **[Google Keep Sync](#-google-keep-bidirectional-sync)** •
25
+ **[Configuration](#-configuration)**
26
+
27
+ ---
28
+
29
+ </div>
30
+
31
+ ## 💡 Why Markora?
32
+
33
+ If you love the simplicity, offline-first philosophy, and markdown-native architecture of the popular Android app **[Markor](https://github.com/gsantner/markor)**, **Markora** brings that exact seamless experience straight into your terminal.
34
+
35
+ - **Zero Cloud Lock-in**: Your data is 100% plain Markdown files in `~/Documents` (or your custom directory). You own your notes forever.
36
+ - **Zero Heavy Dependencies**: Core CLI and interactive TUI run entirely on the Python 3 standard library. No Electron bloat, no node_modules, no heavy frameworks.
37
+ - **Dual Personality**: Use lightning-fast one-liner CLI commands (`markora add`, `markora qn`) for scriptability, or fire up the rich interactive 4-tab Curses TUI (`markora ui`) for browsing, editing, and task triage.
38
+ - **Seamless Portability**: Sync your folder with Syncthing, Nextcloud, Git, or Android Markor without converting formats.
39
+
40
+ ---
41
+
42
+ ## ✨ Key Features
43
+
44
+ | Feature | Description |
45
+ | :--- | :--- |
46
+ | 📝 **QuickNote / Scratchpad** | Instant timestamped brain dumps saved directly to `quicknote.md`. |
47
+ | ✅ **To-Do & Milestones** | Parse and manage markdown task lists with priorities (`P1`, `P2`, `P3`), tags (`#urgent`, `@work`), sections, and sub-items. |
48
+ | 📚 **Notebook Tree** | Hierarchical directory tree with folding/unfolding, file counts, and folder creation. |
49
+ | ⭐ **Star & Pin Favorites** | Pin your most crucial notes to the top for instantaneous access. |
50
+ | 🔍 **Global Full-Text Search** | Real-time substring and regex search across all markdown files with direct line jumping into `$EDITOR`. |
51
+ | 🖱️ **Full Mouse & Keyboard** | Click tabs, check/uncheck tasks, fold folders, and scroll panes with full terminal mouse support. |
52
+ | 🔄 **Google Keep Bridge** | Optional bidirectional sync with Google Keep (`markora keep sync`) for seamless mobile-to-desktop workflow. |
53
+
54
+ ---
55
+
56
+ ## 🖥️ Interactive Curses TUI
57
+
58
+ Launch with `markora ui` (or alias `td ui`):
59
+
60
+ ```
61
+ ┌────────────────────────────────────────────────────────────────────────┐
62
+ │ MARKORA NOTEBOOK | SSOT: TODOLIST.md │
63
+ ├────────────────────────────────────────────────────────────────────────┤
64
+ │ [1] QuickNote [2] To-Do [3] Notebook [4] Search Filter: (none)│
65
+ ├──────────────────────────────────┬─────────────────────────────────────┤
66
+ │ > [✔] # 1 [P1] Deploy core v1.0 │ Task #1 Details │
67
+ │ [ ] # 2 [P2] Write user manual │ Section : ACTIVE TASKS │
68
+ │ [ ] # 3 [P3] Refactor keep api │ Status : DONE │
69
+ │ │ Priority: P1 │
70
+ │ │ Scope: Production release │
71
+ │ │ Deliverables: Clean package │
72
+ ├──────────────────────────────────┴─────────────────────────────────────┤
73
+ │ [Space] Toggle [a] Add [r] Edit [d] Del [e] Editor [s] Sync Keep [q] │
74
+ └────────────────────────────────────────────────────────────────────────┘
75
+ ```
76
+
77
+ ---
78
+
79
+ ## 📦 Installation
80
+
81
+ ### Option 1: 1-Line Standalone Installer (Recommended)
82
+
83
+ ```bash
84
+ curl -fsSL https://raw.githubusercontent.com/zyekhabdul/markora/main/install.sh | bash
85
+ ```
86
+
87
+ This installs `markora` (and aliases `td`, `todo`, `mo`) into `~/.local/bin/`.
88
+
89
+ ### Option 2: Pip / Pipx Installation
90
+
91
+ ```bash
92
+ # Standard install (Zero external dependencies)
93
+ pip install git+https://github.com/zyekhabdul/markora.git
94
+
95
+ # With optional Google Keep synchronization
96
+ pip install "markora[keep] @ git+https://github.com/zyekhabdul/markora.git"
97
+ ```
98
+
99
+ ### Option 3: Manual Clone & Symlink
100
+
101
+ ```bash
102
+ git clone https://github.com/zyekhabdul/markora.git ~/Projects/markora
103
+ cd ~/Projects/markora
104
+ make symlink
105
+ ```
106
+
107
+ ---
108
+
109
+ ## 🚀 CLI Command Reference
110
+
111
+ All commands support both `markora` and the ultra-short alias `td`:
112
+
113
+ ```bash
114
+ # --- QuickNotes ---
115
+ td qn "Remember to review pull request" # Append thought
116
+ td qn # View quicknotes
117
+ td qn -e # Edit in $EDITOR
118
+
119
+ # --- Task Management ---
120
+ td add "Ship version 1.0" -p p1 # Add high-priority task
121
+ td add "Research new indexing" -s "Inbox" # Add to specific section
122
+ td list # List all tasks
123
+ td list -p # Show only pending tasks
124
+ td list -d # Show completed tasks
125
+ td list -t #backend # Filter by tag
126
+ td done 1 3 # Complete tasks #1 and #3
127
+ td undone 2 # Mark task #2 pending
128
+ td toggle 1 # Toggle completion status
129
+ td rm 4 # Delete task #4
130
+
131
+ # --- Markdown Notebook ---
132
+ td note "System Architecture" # Create new note in notes/
133
+ td note -d # Open today's daily note
134
+ td notes # List all notebook files
135
+ td find "authentication" # Search across all notes
136
+ td fav list # List starred notes
137
+ td fav add notes/project.md # Star a note
138
+
139
+ # --- TUI & Integrations ---
140
+ td ui # Launch interactive 4-tab TUI
141
+ td keep auth # Connect Google Keep
142
+ td keep sync # Two-way sync with Keep
143
+ ```
144
+
145
+ ---
146
+
147
+ ## ⌨️ TUI Keyboard Shortcuts
148
+
149
+ | Key | Context | Action |
150
+ | :--- | :--- | :--- |
151
+ | `1` / `2` / `3` / `4` | Global | Switch directly to Tab 1–4 |
152
+ | `Tab` | Global | Cycle to next tab |
153
+ | `j` / `k` / `↑` / `↓` | Navigation | Move cursor up / down |
154
+ | `g` / `G` | Navigation | Jump to top / bottom of list |
155
+ | `Space` / `x` | To-Do Tab | Toggle task checkbox (`[ ]` ↔ `[✔]`) |
156
+ | `a` | Global | Append QuickNote or Add To-Do task |
157
+ | `t` | QuickNote | Insert current timestamp log entry |
158
+ | `n` | Notebook | Create new `.md` note in highlighted folder |
159
+ | `N` / `m` | Notebook | Create new subfolder |
160
+ | `f` / `p` | Notebook | Star / Toggle Favorite note `[⭐]` |
161
+ | `r` / `R` | Global | Rename note/folder or edit task title |
162
+ | `d` | Global | Delete task, note, or directory (with confirmation) |
163
+ | `Enter` / `l` / `→` | Notebook | Open note in `$EDITOR` / Expand folder |
164
+ | `h` / `←` | Notebook | Collapse folder / Jump to parent folder |
165
+ | `e` | Global | Open current document in `$EDITOR` (`nvim`, `zed`, etc.) |
166
+ | `s` / `S` | Global | Trigger Google Keep bidirectional synchronization |
167
+ | `/` | Global | Live filter tree / search query |
168
+ | `Esc` | Global | Clear filter query |
169
+ | `Ctrl+R` | Global | Force reload data from disk |
170
+ | `?` | Global | Open interactive Keyboard Shortcut Help Modal |
171
+ | `q` | Global | Quit Markora |
172
+
173
+ ---
174
+
175
+ ## 🔄 Google Keep Bidirectional Sync
176
+
177
+ Markora includes a built-in sync engine that maps your Google Keep notes to your local markdown hierarchy:
178
+
179
+ - **Daily Notes** → Synced with Keep notes labeled `daily-notes`
180
+ - **QuickNote** → Synced with Keep note titled `QuickNote`
181
+ - **General Notes** → Synced with Keep notes labeled `notes`
182
+
183
+ ### How to Authenticate:
184
+
185
+ ```bash
186
+ # Install Keep dependencies
187
+ pip install "markora[keep]"
188
+
189
+ # Run interactive auth (automated browser popup or token paste)
190
+ markora keep auth
191
+
192
+ # Perform two-way sync
193
+ markora keep sync
194
+ ```
195
+
196
+ ---
197
+
198
+ ## ⚙️ Configuration
199
+
200
+ Markora respects standard Unix configuration paradigms and environment variables:
201
+
202
+ | Environment Variable | Default | Purpose |
203
+ | :--- | :--- | :--- |
204
+ | `MARKORA_NOTES_DIR` / `NOTES_DIR` | `~/Documents` | Root directory for your markdown notes |
205
+ | `MARKORA_TODO_FILE` / `TODO_FILE` | `$NOTES_DIR/TODOLIST.md` | Master todolist markdown file |
206
+ | `EDITOR` / `VISUAL` | `nvim` (fallback: `zed`, `nano`, `vi`) | Preferred text editor |
207
+
208
+ Config files are stored in `~/.config/markora/` (with automatic fallback to `~/.config/td/`).
209
+
210
+ ---
211
+
212
+ ## 🐚 Shell Completion
213
+
214
+ Shell completion scripts for Bash and Zsh are located in [`completions/`](completions/):
215
+
216
+ ```bash
217
+ # Bash
218
+ source <(cat completions/markora.bash)
219
+
220
+ # Zsh
221
+ cp completions/markora.zsh ~/.zsh/completion/_markora
222
+ ```
223
+
224
+ ---
225
+
226
+ ## 🛠️ Development & Testing
227
+
228
+ ```bash
229
+ git clone https://github.com/zyekhabdul/markora.git
230
+ cd markora
231
+
232
+ # Setup editable install with test dependencies
233
+ make dev
234
+
235
+ # Run comprehensive test suite
236
+ make test
237
+
238
+ # Lint & syntax validation
239
+ make lint
240
+ ```
241
+
242
+ ---
243
+
244
+ ## 📄 License
245
+
246
+ MIT License © 2026 [zyekhabdul](https://github.com/zyekhabdul).
247
+ Built with craftsmanship for sovereign terminal enthusiasts.
@@ -0,0 +1,88 @@
1
+ [build-system]
2
+ requires = ["setuptools>=61.0", "wheel"]
3
+ build-backend = "setuptools.build_meta"
4
+
5
+ [project]
6
+ name = "markora"
7
+ version = "1.0.0"
8
+ description = "⚡ Sovereign Markor-style Markdown Notebook, QuickNotes & Todo TUI for Terminal Power Users"
9
+ readme = "README.md"
10
+ requires-python = ">=3.8"
11
+ license = { text = "MIT" }
12
+ authors = [
13
+ { name = "zyekhabdul", email = "zyekhabdulqadirjailani@gmail.com" }
14
+ ]
15
+ keywords = [
16
+ "markora",
17
+ "markor",
18
+ "markdown",
19
+ "notes",
20
+ "notebook",
21
+ "todo",
22
+ "tui",
23
+ "curses",
24
+ "google-keep",
25
+ "productivity",
26
+ "cli",
27
+ "terminal"
28
+ ]
29
+ classifiers = [
30
+ "Development Status :: 5 - Production/Stable",
31
+ "Environment :: Console",
32
+ "Environment :: Console :: Curses",
33
+ "Intended Audience :: Developers",
34
+ "Intended Audience :: End Users/Desktop",
35
+ "License :: OSI Approved :: MIT License",
36
+ "Operating System :: POSIX :: Linux",
37
+ "Operating System :: MacOS",
38
+ "Programming Language :: Python :: 3",
39
+ "Programming Language :: Python :: 3.8",
40
+ "Programming Language :: Python :: 3.9",
41
+ "Programming Language :: Python :: 3.10",
42
+ "Programming Language :: Python :: 3.11",
43
+ "Programming Language :: Python :: 3.12",
44
+ "Programming Language :: Python :: 3.13",
45
+ "Programming Language :: Python :: 3.14",
46
+ "Topic :: Text Editors",
47
+ "Topic :: Utilities"
48
+ ]
49
+ dependencies = []
50
+
51
+ [project.optional-dependencies]
52
+ keep = [
53
+ "gkeepapi>=0.14.0",
54
+ "gpsoauth>=1.0.0"
55
+ ]
56
+ browser-auth = [
57
+ "playwright>=1.40.0"
58
+ ]
59
+ all = [
60
+ "gkeepapi>=0.14.0",
61
+ "gpsoauth>=1.0.0",
62
+ "playwright>=1.40.0"
63
+ ]
64
+ dev = [
65
+ "pytest>=7.0.0",
66
+ "pytest-cov>=4.0.0",
67
+ "flake8>=6.0.0"
68
+ ]
69
+
70
+ [project.scripts]
71
+ markora = "markora.cli:main"
72
+ td = "markora.cli:main"
73
+ todo = "markora.cli:main"
74
+ mo = "markora.cli:main"
75
+
76
+ [project.urls]
77
+ Homepage = "https://github.com/zyekhabdul/markora"
78
+ Repository = "https://github.com/zyekhabdul/markora.git"
79
+ Issues = "https://github.com/zyekhabdul/markora/issues"
80
+ Changelog = "https://github.com/zyekhabdul/markora/blob/main/CHANGELOG.md"
81
+
82
+ [tool.setuptools.packages.find]
83
+ where = ["src"]
84
+
85
+ [tool.pytest.ini_options]
86
+ testpaths = ["tests"]
87
+ python_files = ["test_*.py"]
88
+ addopts = "-v"
@@ -0,0 +1,4 @@
1
+ [egg_info]
2
+ tag_build =
3
+ tag_date = 0
4
+
markora-1.0.0/setup.py ADDED
@@ -0,0 +1,17 @@
1
+ #!/usr/bin/env python3
2
+ from setuptools import setup, find_packages
3
+
4
+ setup(
5
+ name="markora",
6
+ version="1.0.0",
7
+ package_dir={"": "src"},
8
+ packages=find_packages(where="src"),
9
+ entry_points={
10
+ "console_scripts": [
11
+ "markora = markora.cli:main",
12
+ "td = markora.cli:main",
13
+ "todo = markora.cli:main",
14
+ "mo = markora.cli:main",
15
+ ],
16
+ },
17
+ )