Skip to content

About

A paperclip in the corner of your Omarchy desktop that follows your mouse and hands out tips from the manual.

Resources

Stars

28 stars

Watchers

1 watching

Forks

Latest commit

 

History

20 Commits

Folders and files

Repository files navigation

Clippy for Omarchy

Clippy in the corner of an Omarchy desktop, showing a hotkey tip from the manual

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.

Install

omarchy plugin add https://github.com/jankeesvw/omarchy-clippy --enable

That 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.sh

It 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.

Requirements

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.

Using him

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.

His repertoire

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).

Keyboard and IPC

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 above

Let him tell you things

Anything 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:

Clippy saying that a pull request is ready, with Open PR and Preview buttons

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")

Settings

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.

How it works

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.js

A 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.

Privacy

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.

Removing

omarchy plugin remove jankeesvw.clippy

Clippy 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.desktop

License

MIT. 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.

About

A paperclip in the corner of your Omarchy desktop that follows your mouse and hands out tips from the manual.

Resources

Stars

28 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages