Skip to content
cd ../projects

2026

Lamp — Omarchy Plugin

An open-source widget for the Omarchy Linux desktop that gives a working session a beginning and an end, and leaves behind prose instead of a dashboard.

QMLJavaScriptPythonOmarchy ShellLinux
Lamp lit in the Omarchy bar with the session panel open

cat problem.md

The problem

The Omarchy plugin marketplace already has clocks, sports scores, AI usage meters, website blockers, pomodoros, workspace modes, and desktop pets. What it does not have is a session.

Every tool in that list measures time or restricts behavior. None of them ask what this stretch of time is for, and none of them record what actually came of it.

Lamp is deliberately the opposite of a streak tracker. It does not block sites, swap wallpaper, or start a timer you have to obey. It marks a beginning and an end, and asks one question at the end.

tree --architecture

Architecture

~/lamp
Omarchy bar
  [ ◉ Finish the submission   47m 12s ]
        |
        |  click / SUPER+SHIFT+L
        v
  Overlay.qml  -- one sentence of intention
                  optional 25m / 50m / 90m
        |
        v
  Service.qml  -->  scripts/lamp.py  (stdlib only)
        |                 |
        |                 +--> ~/.local/state/omarchy/lamp/
        |                 |       session.json   (current flame)
        |                 |
        |                 +--> ~/.local/share/omarchy-lamp/
        |                         YYYY-MM-DD.md  (journal)
        v
  extinguish -> "what moved?" -> append page

Three QML files and one Python helper. The helper touches exactly two paths and never opens a socket.

layertechnologyresponsibility
Bar widgetBarWidget.qmlHolds the flame and the elapsed clock, turns red past the limit
OverlayOverlay.qml, Panel.qmlIntention input, time presets, and the closing prompt
StateService.qml, Model.jsSession lifecycle and shell integration
Helperscripts/lamp.py, Python stdlibReads and writes session state and the markdown journal
StorageJSON + daily markdownsession.json for the live flame, one dated page per day

git log --decisions

Key decisions

  1. Going over time changes the color, nothing else

    Past the limit the bar turns red and the clock keeps running. No alarm, no forced break, no interruption. The limit is information about the session, not authority over it.

  2. The output is prose, not metrics

    A session writes an intention, a planned duration, and one line about what moved. There is no streak, no score, and no chart, because the thing worth keeping is the sentence, not the count.

  3. No network, no dependencies, no install hook

    The helper uses only the Python standard library that ships with Omarchy. Nothing is fetched at install time and nothing phones home, which means the plugin can be audited by reading four files.

  4. Uninstalling does not delete your pages

    Removal leaves the journal and state directories in place. A tool that erases months of written notes because you disabled it is not one worth trusting with them.

  5. The helper touches exactly two paths

    It does not spawn a shell, change the theme, or read anything else on disk. Narrowing the blast radius to two documented paths is what makes 'read it before you enable it' a realistic ask.

cat outcome.md

Outcome

  • Released as open source under MIT and installable directly from the Omarchy plugin command, publicly available to Omarchy users and actively maintained.
  • Works from the bar, a keybind, or the shell, and can be removed cleanly with a single plugin command.
  • Written as a deliberate counterweight to an agentic desktop: the machine can keep running, and the person still says what the time was for.