A bar widget for Omarchy Quattro showing live blood glucose readings from a FreeStyle Libre sensor (via LibreLinkUp) — current value, trend arrow, and range status at a glance.
The bar shows the current reading and a trend arrow, colored yellow (low), green (in range), or red (high) against your target range; it flashes a few times whenever a reading crosses into or out of range. Click it for a panel with a history graph (area fill + smoothed trend line, axis labels), the share of time in range, min/max/average, and remaining sensor life.
FreeStyle Libre's LibreView site only supports uploading a sensor's history, not live polling. LibreLinkUp — the companion app diabetics use to share readings with a caregiver — does have a (reverse-engineered, unofficial) API, and that's what this plugin polls.
You do not use your main FreeStyle Libre account here. You need a separate LibreLinkUp follower account:
- Open the FreeStyle Libre / LibreLink app on the phone paired with the sensor.
- Go to Settings → "LibreLinkUp" / "Share my data" → invite a follower.
- Accept that invite using a different email address — that's your LibreLinkUp account (install the LibreLinkUp app, or use the emailed link, to set its password).
- Use that account's email + password for this plugin, not your main one.
The poller script (bin/glucose-status.sh) logs in, caches the session
token (valid for months) in ~/.cache/omarchy-glucose/, and on every poll
makes a single read-only API call. Nothing is ever written back to
LibreView/LibreLinkUp.
Create a credentials file (not inside this plugin folder):
mkdir -p ~/.config/omarchy/glucose cat > ~/.config/omarchy/glucose/credentials <<'EOF' LIBRELINKUP_EMAIL=you@example.com LIBRELINKUP_PASSWORD=your-librelinkup-password EOF chmod 600 ~/.config/omarchy/glucose/credentialsEnable the widget:
omarchy plugin enable io.github.boyoyooo.glucomarchy --section rightPoint it at your credentials file — edit the widget's entry in
~/.config/omarchy/shell.json(bar.layout.right) and add:{ "id": "io.github.boyoyooo.glucomarchy", "credentialsFile": "/home/you/.config/omarchy/glucose/credentials" }
| Key | Default | Description |
|---|---|---|
credentialsFile | (required) | Path to the file with LIBRELINKUP_EMAIL / LIBRELINKUP_PASSWORD |
interval | 60 | Poll interval in seconds (floored at 20s) |
label | (none) | Optional label shown in the panel title and tooltip |
targetLow | 0 | Low threshold override in mg/dL. 0 = use the range configured on your LibreView account |
targetHigh | 0 | High threshold override in mg/dL. 0 = use the range configured on your LibreView account |
sensorLifetimeDays | 14 | Sensor duration used to compute "days left" — check your sensor's box/app, it varies by model and region (commonly 14, 15, or 16) |
notifyOnRangeChange | false | Also send a desktop notification when crossing into/out of range (the bar flash always happens) |
omarchy plugin remove io.github.boyoyooo.glucomarchy
Then delete ~/.config/omarchy/glucose/ and ~/.cache/omarchy-glucose/ if
you want the credentials file and cached session token gone too — neither is
touched by plugin remove since they live outside the plugin folder.
- Credentials are read from a file you control,
sourced into shell variables — never exported to the environment, never passed as a command-line argument. Neither is readable by another process on the same machine via/proc/<pid>/environor/proc/<pid>/cmdline. The poller refuses to run if that file is owned by someone else or writable by group/other, since sourcing it is effectively running it. - The session token is cached per-account (
~/.cache/omarchy-glucose/,chmod 600, directorychmod 700,umask 077for the whole script) so your password is sent to Abbott's servers only on first run or after the cached token expires — not on every poll. A rejected login (e.g. a typo'd password) backs off for up to an hour instead of retrying — and resending the password — on every single poll. - No glucose data is ever written to disk outside of QML's in-memory state; the only thing this plugin persists is the session token.
- The only write request this plugin ever makes is the LibreLinkUp
authentication call itself (email + password, over TLS, to Abbott's own
servers). Every other request is a read-only
GET. Nothing is ever uploaded to or modified on your LibreView/LibreLinkUp account. - A missing current reading (sensor warming up, momentarily no data) is
reported as an error, never displayed as a fabricated
0 mg/dL— for a glucose widget, a false low is a worse failure than showing nothing.
This is an unofficial, community-built integration. It has no affiliation with Abbott, FreeStyle Libre, or LibreView; it uses the same reverse-engineered API relied on by other open-source glucose tools (e.g. Nightscout bridges). Abbott can change or break that API at any time.
MIT

