A paperclip in the bottom-right corner of your screen. His eyes follow your mouse, he bends his wire into the shapes the original Office Assistant knew, curls up when you walk away, and every now and then he taps the glass with a tip from the Omarchy manual.
omarchy plugin add https://github.com/jankeesvw/omarchy-clippy --enableThat gives you Clippy, but not a launcher entry: a shell plugin is not an application, and the launcher only indexes .desktop files. To get one as well, run the installer from a checkout of this repository instead:
./install.shIt runs omarchy plugin add (or omarchy plugin update when Clippy is already there) and omarchy plugin enable, and writes ~/.local/share/applications/clippy.desktop, whose Exec is omarchy-shell jankeesvw.clippy toggle. Nothing else. Search for Clippy in the launcher to send him away or bring him back.
Omarchy 4 (Quattro) on Hyprland. Clippy uses only what Omarchy already ships: the system python3 for the cursor helper and omarchy-launch-webapp to open the manual. No packages to install, no accounts, no API keys.
| Do | He |
|---|---|
| Start the shell | rides in on a bicycle made of himself, his eyes as the wheels, becomes a paperclip, then turns into the Omarchy logo to say hello and stays that way for ten seconds before he is a paperclip again |
| Move the mouse | follows it with his eyes, even from the other side of the screen |
| Move the mouse near him | turns see-through and lets your clicks pass to whatever is behind him; rest the pointer on him for a moment and he is solid again |
| Drag him, or Super + drag | picks him up and puts him wherever you drop him; the spot is remembered |
| Left-click him | shows a tip from the manual, with a different reaction each time |
| Right-click him | curls up and asks whether you want him to go away |
| Open manual | turns into a check mark and opens the page on omarchy.org |
| Next tip | reacts (points, scratches his head, puts on his glasses, turns into an atom, ...) and shows another one; every tip comes once before any repeats, and hardly ever two from the same manual page in a row |
| Ride off | folds into the bicycle and rides off the edge of the screen |
| Leave the mouse alone for two minutes | collapses into a pile of wire and snores until you move it |
The bubble closes by itself after 30 seconds unless the pointer is on it.
The animations are modelled on the Office Assistant's own, but drawn from scratch: Clippy is one wire of 220 points, and every pose is that wire resampled, so he can bend from any shape into any other with a ripple on the way.
| Name | Original | What happens |
|---|---|---|
attention |
GetAttention | huge eyes and two taps on the glass |
bang |
Wave | stretches up into an exclamation mark, eyes as the dot |
atom |
IdleAtom | unrolls into a ring, spins up into an atom with his eyes as electrons |
pile |
IdleRopePile | collapses into a coil and peeks around |
check |
Congratulate | a check mark |
point |
GestureUp | points up at the bubble |
scratch |
IdleHeadScratch | scratches his head |
tap |
IdleFingerTap | taps his foot, impatiently |
glasses |
CheckingSomething | reading glasses on |
music |
Hearing | headphones on, nodding along |
look |
IdleSideToSide | looks left and right |
brows |
IdleEyeBrowRaise | raises his eyebrows |
logo |
bends into the Omarchy logo, his eyes in the middle | |
hop, wiggle, flip |
the small stuff in between |
Like the Office Assistant, the big animations are reactions to what you do: every tip, button and click has its own. Left alone he idles in levels. For three minutes after you dealt with him he only blinks and follows the mouse; after that a small one (look, brows, tap, glasses) now and then; and once he has been ignored for ten minutes, occasionally a big one (atom, pile, music, scratch, bang, flip).
Clippy takes the keyboard only when you click him, and shows an outline while he has it:
| Key | He |
|---|---|
W, Delete or Backspace |
rides off, the way Super + W closes a window |
Enter, Space or T |
shows a tip |
| Arrow keys | moves over a little, with Shift a lot |
Escape |
closes the bubble, and a second time hands the keyboard back |
Super + W itself belongs to Hyprland and never reaches a layer surface, which is why he answers to plain W. Everything he does is also reachable over IPC. Bind any of these to a key:
omarchy-shell jankeesvw.clippy tip # show a tip now
omarchy-shell jankeesvw.clippy toggle # send him away or bring him back
omarchy-shell jankeesvw.clippy show
omarchy-shell jankeesvw.clippy hide
omarchy-shell jankeesvw.clippy fidget # play a random animation
omarchy-shell jankeesvw.clippy animate atom # play one from the repertoire aboveAnything that can run a command can make Clippy say something, which makes him a nice companion for a coding agent that finished, a build that broke, or a deploy that went out:
omarchy-shell jankeesvw.clippy say "It looks like your agent is done!" 'Claude finished `my-project`.'
omarchy-shell jankeesvw.clippy sayLink "Your PR is ready" 'CI passed on `feature-branch`.' \
"Open PR" "https://github.com/you/project/pull/42"
omarchy-shell jankeesvw.clippy sayLinks "Deploy finished" "Version 1.4 is live." \
"Open site" "https://example.com" "Open logs" "http://localhost:3000/logs"The title is capped at 80 characters, the text at 300, and a button label at 24. Text between backticks is shown in bold; any other markup is escaped. Buttons open their link in your default browser. Links must be https://, or http:// to localhost, and may not contain credentials, whitespace or quotes; a rejected link makes the command answer invalid link instead of showing the bubble. Nothing that talks to Clippy over IPC can open anything by itself: a link only opens when you click its button.
For example in ~/.config/hypr/bindings.lua:
o.bind("SUPER + CTRL + SLASH", "Clippy tip", "omarchy-shell jankeesvw.clippy tip")Add any of these to the jankeesvw.clippy entry in the plugins array of ~/.config/omarchy/shell.json:
{
"id": "jankeesvw.clippy",
"intervalMinutes": 20,
"greeting": true,
"dodge": true,
"idleMotion": true,
"monitor": "DP-1",
"marginX": 24,
"marginY": 24
}intervalMinutes is how often he offers a tip unprompted; 0 means only when you click him. dodge turns the see-through behaviour off when set to false. idleMotion set to false stops the slow sway and breathing he does while nothing happens; they repaint his surface every frame, which on an older laptop costs around a tenth of a CPU core. His eyes still follow the mouse and every reaction still plays. marginX and marginY are his distance from the bottom-right corner, and are what dragging him writes back. monitor is an output name from hyprctl monitors; without it he stays on the monitor that had focus when the shell started.
The tips live in Tips.js, generated from the Markdown sources of the manual in omacom/omarchy by tools/build-tips.py. It collects hotkey tables, the top bar's click table, and sentences that mention a hotkey or an omarchy command. Nothing is downloaded at runtime.
tools/build-tips.py ~/Documents/github.com/omacom/omarchy/manual > Tips.jsA layer surface only receives pointer positions while the pointer is over it, so bin/clippy-cursor asks Hyprland's request socket for cursorpos about 30 times a second while the mouse moves and 5 times a second while it rests, and prints a line only when the position changed. It runs with a cleared environment and exits when the shell stops it.
The cursor position stays on your machine: bin/clippy-cursor reads it from Hyprland's socket and hands it to the shell over a pipe, and nothing is logged or stored. Clippy writes no files of his own: the only thing he saves is where you dragged him, as marginX and marginY on his own entry in ~/.config/omarchy/shell.json, through the shell's settings API. That API does not hand a service its settings, so he reads his own entry from that same file, at startup and again just before saving his position; files over 256 KB are ignored. The only network access is the manual page you open with the Open manual button, in your browser.
omarchy plugin remove jankeesvw.clippyClippy writes no files, so there is nothing left behind besides his entry in ~/.config/omarchy/shell.json, which the command above removes. If you used install.sh, also remove the launcher entry:
rm ~/.local/share/applications/clippy.desktopMIT. Clippy here is an original drawing of a paperclip, not Microsoft's artwork; the animations are inspired by the Office Assistant's repertoire, and no original assets are used.
The tips in Tips.js are sentences and hotkey tables taken from the Omarchy manual, copyright David Heinemeier Hansson, released under the MIT License.
The launcher icon icon.png is the paperclip emoji from Noto Color Emoji, copyright Google, released under the SIL Open Font License 1.1.

