project / design study

WhackyTech Workbench

A Debian VM plan put activities, a command palette, plain-file state, and recovery at the center of a small Xorg/FVWM3 desktop experiment.

I kept coming back to an awkward desktop question: why did I have to reopen several applications before I could resume one activity? For WhackyTech Workbench, I wanted Build, Research, Write, Play, and Recover to be working contexts with visible history, rather than merely names for groups of windows. The first design stretched toward building a whole environment. I pulled it back to a minimal Debian VM so I could test the interaction without first making an operating system.

The proposed stack—Xorg, xinit, FVWM3, xterm, and a command palette—was deliberately modest. The important work was assigning identity to an activity and deciding what it should restore after interruption or failure. Reviews kept returning to recovery and the boundary between the window manager and Workbench itself. The plan reached a concrete set of small contexts and a build sequence, while the VM implementation and reliable session restoration remained to be demonstrated.

The command boundary

The design centered on a shell command called wt. Both keyboard menus and direct terminal use would go through it:

wt open build
wt open research
wt show status
wt show timeline
wt log <message>
wt menu

In the supplied draft, wt open selected an activity script, recorded the current activity, appended a timeline event, and launched that script. The palette offered the same actions as a list. This meant the interaction model could be exercised from the command line before it needed a more elaborate interface.

State was intentionally plain. A current-activity file held the selected name, while a timeline log recorded timestamped events. The status view gathered basic system information, memory, and mounts. There was no custom desktop database in the plan.

Seven small working contexts

The activity scripts were deliberately uncomplicated:

Activity Proposed opening behavior
Console Start a terminal
Build Open a build terminal and a terminal following the timeline
Research Start an available browser, or explain that none is configured
Configure Show read-only diagnostic starting points
Write Open a shell in a notes directory
Play Start Steam if available, otherwise show a placeholder
Recover Display system identity, failed services, disk usage, and mounts

Recover mattered because it was part of the normal model, not an emergency procedure hidden elsewhere. Its first version displayed information; it did not automatically run repair commands.

The proposed bindings put the palette on Super+Space, a terminal on Super+Enter, and the seven activities on Super+F1 through Super+F7. A root-window menu provided another route to the same actions.

Keeping the experiment reversible

The session flow was manual: log in at a TTY, run startx, enter the Workbench, and return to the TTY on logout. The plan called for VM snapshots before major phases and preserved that terminal login route. It avoided a display manager, autologin, bootloader changes, and automatic recovery actions.

The intention was to test activities, command routing, visible state, and recovery without also inventing a compositor, widget toolkit, or package manager. Wayland, animations, plugins, and automatic session restoration were outside the initial scope.

The unresolved part was activity ownership

The review exposed a useful weakness: the 0.1 scripts launched applications, but they did not yet define the lifetime of an activity. If Build opens two terminals, what makes Build active, closed, or failed? Can two Build activities exist? Does switching activity imply changing workspace? What happens if one child process exits?

The assistant proposed a later model with a name, workspace, start time, status, and tracked processes. It also suggested structured timeline events such as activity opening and process spawning. Those were recommendations for a subsequent version, not features proved by the shell draft.

One concrete implementation concern was the broad process-name-based logout command. A later version would need to own and terminate its specific session process rather than assume every matching window-manager process belonged to it.

The build plan had a small Debian environment and a set of activity views to try. Its unresolved question was whether Build, Research, or Write could retain enough identity and history to resume usefully after interruption. This record ends before a completed VM proves that experience.

Related rabbit holes

PublishedOct 3, 2026
note / experiment

A thin-client Linux experiment

A network-boot question became a comparison of separate remote desktops and shared physical desktops, ending with a usable Linux thin-client session and working audio.

Documented activity: September 20, 2026 – September 26, 2026