PrimoDev/ apps

HoleDeep

A Mac pomodoro timer where a black hole devours your screen on breaks

  • macOS
  • Free
  • Open source
  • v0.1.0

What is HoleDeep?

HoleDeep is a pomodoro timer for macOS where breaks are enforced by a black hole. When a focus session ends, a Schwarzschild black hole spawns over your live desktop and gravitationally lenses everything until the break is over.

It's open source under the MIT license. Release v0.1.0 ships a .dmg for Apple Silicon and Intel Macs; from source it's npm install and npm run tauri dev.

What it does

  1. 01A real work and break timer with a menu bar icon
  2. 02Defaults to 25 minutes of focus and 5 of break, adjustable
  3. 03On breaks, a black hole with photon ring, accretion disk and chromatic aberration covers every monitor
  4. 04Your desktop stays live underneath, captured with ScreenCaptureKit
  5. 05The lensing comes from a WebGL2 shader that integrates the black hole physics per pixel
  6. 06Optional blocking of sites (like reddit.com, youtube.com and x.com) and apps during focus
  7. 07The screen is never locked: hold Esc for 2.5 s to skip a break

FAQ

Is HoleDeep free?
Yes. It's open source under the MIT license. The black hole shader is a port of blackhole.glsl by s13k, also MIT.
Does it run on Windows or Linux?
Not yet. The timer, overlay and shader are cross-platform, but live screen capture uses ScreenCaptureKit, which is macOS-only. Published builds are Mac-only (Apple Silicon and Intel).
Why does it ask for Screen Recording permission?
To show your live desktop being swallowed by the black hole. Without it the app still works, but the black hole renders over deep space instead of your screen. The capture is only used to draw the overlay on your machine.
Can I skip a break?
Yes. The screen is never actually locked: hold Esc for 2.5 seconds and the break ends. You can also skip the phase from the menu bar icon.
How does site blocking work?
It's optional and only applies during focus. HoleDeep adds the blocked domains to /etc/hosts, so macOS asks for your admin password. Apps on the list are closed while focus is running.
Can I change the focus and break lengths?
Yes. The default is 25 minutes of focus and 5 of break, and you can set 1 to 180 minutes of focus and 1 to 60 of break.

Documentation

README from the lucianodiisouza/holedeep repository, refreshed on every deploy.

focus, or be devoured.

A pomodoro timer for macOS where break time is enforced by a black hole. When your focus session ends, a Schwarzschild black hole spawns over your live desktop and gravitationally lenses your work into oblivion — photon ring, accretion disk, chromatic aberration and all — until the break is over and it evaporates.

Built with Tauri 2 + React + WebGL2.

holedeep devouring an editor mid-break

How it works

  1. The Rust side runs a real work/break timer (tray icon included).
  2. At break start it screenshots every monitor (xcap) for an instant first frame, opens a borderless always-on-top overlay window per monitor, then starts a ScreenCaptureKit stream (scap) per display — excluding the overlays themselves so the hole doesn't capture itself. The overlay polls ~15 fps, so the desktop stays live while being devoured.
  3. The overlay renders the desktop through a WebGL2 fragment shader that integrates null geodesics through the Schwarzschild metric per pixel — the shadow, lensing, and photon ring emerge from the physics, they are not painted on.
  4. Break ends → the hole collapses → overlays close → back to work.

The screen is never actually locked: hold Esc for 2.5 s to skip a break.

Development

npm install
npm run tauri dev

The overlay has a browser demo mode with a synthetic desktop: run npm run dev and open http://localhost:1420/overlay.html — useful for shader work without triggering real breaks.

On first break, macOS will ask for the Screen Recording permission (System Settings → Privacy & Security). Without it the black hole renders over deep space instead of your desktop.

Credits

The shader is a WebGL2 port of blackhole.glsl by s13k (MIT), itself after Eric Bruneton's Real-time High-Quality Rendering of Non-Rotating Black Holes. The original terminal shader had no state, so it faked its pomodoro with wall-clock arithmetic; here the timer is real and the shader just gets told how hungry to be. The pristine original lives in shaders/reference/.