Metadata-Version: 2.4
Name: microjournal
Version: 0.1.4
Summary: A distraction-free terminal writing environment for Raspberry Pi
Requires-Python: >=3.11
Description-Content-Type: text/markdown
Requires-Dist: click<9,>=8.1
Requires-Dist: numpy>=2.4.6
Requires-Dist: rich<14,>=13.7
Requires-Dist: textual<1,>=0.79
Requires-Dist: tomli-w<2,>=1.0
Requires-Dist: typer<1,>=0.12
Provides-Extra: display
Requires-Dist: pillow<12,>=10; extra == "display"
Provides-Extra: nlp
Requires-Dist: spacy<4,>=3.7; extra == "nlp"
Provides-Extra: voice
Requires-Dist: faster-whisper<2,>=1.1; platform_machine != "armv6l" and extra == "voice"
Requires-Dist: numpy<3,>=1.26; extra == "voice"
Requires-Dist: sounddevice<1,>=0.5; extra == "voice"
Provides-Extra: dev
Requires-Dist: numpy<3,>=1.26; extra == "dev"
Requires-Dist: pytest<9,>=8; extra == "dev"

# MicroJournal

MicroJournal turns a Raspberry Pi into a distraction-free e-paper writing appliance.

It is built for headless use on Raspberry Pi OS Lite, with systemd launching MicroJournal directly onto a Waveshare e-paper display. If the Waveshare stack is missing, it falls back to mock mode instead of failing.

## Install

```bash
uv tool install microjournal
```

On Raspberry Pi OS Lite, run the installer after installing the tool:

```bash
microjournal install
microjournal boot enable
```

If you want spaCy-powered NLP, install the optional NLP extra:

```bash
uv tool install "microjournal[nlp]"
```

If you want local voice dictation, install the optional voice extra:

```bash
uv tool install "microjournal[voice]"
```

The voice extra skips `faster-whisper` on Linux `armv6l`, because the upstream wheel stack is not available there.

## Local development

```bash
uv run microjournal
```

## Commands

- `microjournal` launches MicroJournal OS
- `microjournal run` launches MicroJournal OS explicitly
- `microjournal install` prepares Raspberry Pi OS Lite for the e-paper appliance
- `microjournal setup` runs first-time configuration
- `microjournal config` edits settings
- `microjournal sync` syncs notes
- `microjournal export` exports notes
- `microjournal pack export` writes a shareable visual pack JSON file
- `microjournal pack load` applies a visual pack from a JSON file
- `microjournal doctor` checks hardware and dependencies
- `microjournal dictate` runs push-to-talk local speech-to-text
- `microjournal service install` writes the systemd service
- `microjournal service enable` enables and starts the service
- `microjournal service disable` stops and disables the service
- `microjournal service status` prints systemd status
- `microjournal service logs` prints recent service logs
- `microjournal boot enable` enables direct boot into MicroJournal OS
- `microjournal boot disable` disables direct boot

## Storage

- Notes are stored as Markdown in `~/MicroJournal/journal`
- Config is stored in `~/.config/microjournal/config.toml`
- Autosave is enabled by default and runs every 5 seconds

## First run

1. Run `microjournal install`
2. Enable direct boot with `microjournal boot enable`
3. Reboot the Pi
4. MicroJournal OS launches full-screen onto the e-paper display

## Editor shortcuts

- `Ctrl+S` save
- `Ctrl+N` new note
- `Ctrl+F` search notes
- `Ctrl+P` command palette
- `Ctrl+T` theme maker
- `Ctrl+R` view note stats
- `Ctrl+E` export note stats
- `F8` toggle voice recording
- `Ctrl+Q` quit

## NLP stats

- The footer shows live writing stats plus spaCy-powered NLP stats when the optional `nlp` extra is installed
- Note stats export creates a companion `*.ner.md` file with entities and summary stats
- If you install the optional `nlp` extra and the `en_core_web_sm` model is available, named-entity results are richer

## Voice dictation

- The prototype uses the optional `voice` extra with `faster-whisper` plus microphone capture, all locally
- Dictated text is inserted into the editor at the cursor
- Voice mode is push-to-talk: press `Voice` or `F8` to start, then press it again to stop

## Accessibility

- Large UI mode increases spacing, sidebar width, and footer breathing room
- The app does not force terminal font size; that is still controlled by your terminal emulator
- Visual packs let you share a theme, palette, and display setup as a JSON file
- Use the command palette to open the in-app Theme Maker, tweak a pack, and export it for sharing

## Roadmap

- Typing telemetry for sparklines and dashboards, focused on aggregated local writing data rather than raw keystrokes
- More visual pack presets for cyberdeck-style builds
- Better export/share flows for Reddit-ready screenshots and pack files
