# Naarchy 0.4.0: Preferences, doctor, and the privacy pass

Source: https://www.michaelchurley.com/blog/naarchy-0-4-preferences-privacy  
Published: 2026-09-03  
Author: Michael C. Hurley  
Tags: naarchy, linux, hyprland, omarchy, gtk4, rust, privacy, preferences, clipboard, open-source

## Update — 2026-09-09

**0.4.0 is tagged.** [v0.4.0](https://github.com/michaelmonetized/naarchy/releases/tag/v0.4.0) is the Latest GitHub release. Commit `f95ce49`.

Packages: `naarchy-aarch64-unknown-linux-gnu.tar.gz` (built on `m1pro16`), `naarchy-x86_64-unknown-linux-gnu.tar.gz` (built on `hpeliteclient`), source tarball, `SHA256SUMS`. GitHub Actions is still billing-locked, so the binaries were built on those two boxes and uploaded by hand, same as 0.3.3.

Extract a package and run `bash scripts/install.sh`.

Everything below is the 0.4 overhaul as I wrote it before the push. The "not tagged yet" lines were true on September 8.

After the [Sep 3 island post](https://www.michaelchurley.com/blog/naarchy-linux-dynamic-island), I hardened Naarchy locally to **0.4.0**: native Preferences, `naarchy doctor`, atomic stores, travel opt-in, IPC cleanup. Validated on three machines. **Not pushed / not tagged yet.** GitHub tip remains **v0.3.3**.

![Naarchy 0.4 Home: Focus Timer and Now Playing, gear for Preferences](/blog/naarchy-0-4-preferences-privacy/screenshots/home.png)

## Who

This one is for people already living in the island: Omarchy / Hyprland operators who installed Naarchy after the Sep 3 post and started trusting it with clipboard history, file drops, and calendar feeds.

If you care whether state files are written atomically, whether the socket is mode 0600, whether travel estimates ask before they phone Nominatim, and whether `doctor` can tell you the session is sane without opening a GUI, you are the audience.

Builders who ship local-first GTK tools. Multi-machine QA types who refuse to call a release done until it runs on more than the laptop that authored it.

The origin story is already live. This post assumes you know what Naarchy is.

## What

Local tip is **0.4.0**. GitHub tip is still **v0.3.3**. Say that out loud before anything else.

0.4 is the overhaul I validated on September 5 and have been running since: Preferences window, reduced motion, `naarchy --version`, read-only `naarchy doctor`, stricter CLI rejection, atomic clipboard/Inbox/Home state, feature-gated services, travel estimates behind an explicit opt-in, IPC/CLI cleanup, CI that drafts releases with checksums. Roughly fifty-one files, +4937/−4096 against `origin/main` @ `ef9cf87`. Uncommitted. Unpushed. No `v0.4.0` tag.

![Clipboard 0.4: newest-first history, pin, Clear history, gear for Preferences](/blog/naarchy-0-4-preferences-privacy/screenshots/clipboard.png)

Concrete deltas that matter day-to-day:

- **Native Preferences.** Gear opens a bounded floating window for appearance, motion, behavior, and feature controls. Advanced bits stay in `~/.config/naarchy/config.toml`. Appearance reloads live; feature flags and calendar feeds still want a restart.
- **`naarchy doctor`.** Read-only desktop check: Wayland, Hyprland, session bus, daemon, config, timer sound, volume/brightness HUD detection. On this box it prints nine OKs and points at the config path.
- **IPC honesty.** Second process talks JSON over `$XDG_RUNTIME_DIR/naarchy.sock` (mode 0600), waits for a bounded ack that the command entered the queue, not that the UI finished. Single-instance lock. Malformed durations exit 2.
- **Privacy pass.** No telemetry (unchanged). Clipboard + shelf stay owner-only on disk; history is still **not encrypted** while capture is on (disabling Clipboard stops the watcher). Travel estimates (Nominatim / IPinfo|ipapi / OSRM) require opt-in. Clear Inbox does not delete originals. Duplicate drops rejected. Corrupt JSON gets a backup instead of a silent wipe.
- **Atomic stores.** Clipboard, Inbox, and Home preferences write privately and atomically. Failed write keeps previous state.
- **Perf sample (directional, 8s):** collapsed CPU 0.125% then below sample; expanded 0.625% then 0.375%; RSS roughly flat (~82 to 84 MiB collapsed, ~102 to 101 MiB expanded) vs installed 0.3.3.
- **86 Rust tests.** fmt, Clippy `-D warnings`, debug + opt builds, smoke. Fixed a GTK 4.22.4 crash disposing a never-realized hidden window during monitor hotplug / prefs rebuild.

Battery widget is already gone as of 0.3.3 (bar shows %, `hud battery` remains). 0.4 does not bring it back.

![Inbox 0.4](/blog/naarchy-0-4-preferences-privacy/screenshots/inbox.png)

![Widgets 0.4](/blog/naarchy-0-4-preferences-privacy/screenshots/widgets.png)

![Calendar 0.4](/blog/naarchy-0-4-preferences-privacy/screenshots/calendar.png)

## Where

Same seat: Asahi Omarchy / Hyprland on the 16" M1 Pro (`m1pro16`), plus QA on `hpeliteclient` and `intelpro`. Local binary: `naarchy 0.4.0` via `~/.cargo/bin`. Local aarch64 dist archive exists under `target/release/dist/` with SHA256SUMS; that archive wants **glibc 2.39+**. Public GitHub Releases are still the 0.3.3 tarballs until push + remote CI succeed.

Repo: [michaelmonetized/naarchy](https://github.com/michaelmonetized/naarchy). Origin story (Sep 3): [Naarchy: a Dynamic Island for Linux that owns the notch](https://www.michaelchurley.com/blog/naarchy-linux-dynamic-island).

`doctor` on the machine that wrote this draft:

```
Naarchy 0.4.0 · desktop check

OK    Wayland session
OK    Hyprland integration
OK    Session bus
OK    Daemon
OK    Configuration
OK    File opening
OK    Timer sound
OK    Volume HUD detection
OK    Brightness HUD detection
```

## When

**2026-09-03.** Shipped 0.3.0–0.3.3 and published the island post. GitHub tip froze at `ef9cf87` / tag `v0.3.3`.

**2026-09-05 (local).** 0.4.0 overhaul + `docs/VALIDATION.md`. Native prefs, doctor, atomic state, travel opt-in, IPC/CLI refactor. Desktop checks: calendar nav, 48h timer, prefs rebuild, 3× monitor hotplug, fullscreen hide/restore, notification queue. Three-machine QA: m1pro16, hpeliteclient, intelpro.

**2026-09-08.** Still running 0.4.0 locally. Still dirty vs `origin/main`. Still no public release. This EXTEND draft is the trail for when that push lands, or for saying "RC on my boxes" if the story publishes first.

## Why

The Sep 3 post proved the island. 0.4 is about trusting it with operator data.

Preferences belong in a window, not only in TOML. A second process should not hang forever waiting for UI. Travel estimates should not quietly enrich a calendar event. A hidden GTK window should not crash on hotplug dispose. `doctor` should answer "is this session actually wired?" without expanding the panel.

So I hardened the stores, gated the network, measured CPU against 0.3.3, ran eighty-six tests, and installed the same binary on three machines before calling the overhaul validated. Release gates that remain: push, remote GHA with Rust 1.92 pin, sustained everyday use, physical multi-monitor on the targets that matter.

0.4.0 is real on my desktops. It is not on GitHub until I push it. That gap is why this post exists as an EXTEND, not a rewrite.

**Engagement Q:** If your island already sits in the camera notch, what should `naarchy doctor` check next that it does not check today?
