Macora
pre-alpha · my everyday desktop on one NVIDIA machine

A minimalistic and smooth Linux desktop

A Linux desktop made to feel as smooth as a Mac. Written in Rust for Fedora. One process draws everything: windows, panel, dock and notifications. The apps live in the same repo.

Macora desktop: menu bar, dock, Settings and a tabbed file manager
One take, 60 fps, no cuts. Recorded with Macora's own screen recorder.
Why

What's different

Compositor-level tabs

macOS can keep all your VS Code windows as tabs of one window. GNOME and KDE can't, and I missed it every day. In Macora it's a per-app switch: pick an app, and its windows share one titlebar with tabs. Works with any app that lets the system draw its titlebar (server-side decorations), and the app doesn't need to know anything about tabs.

Mac-like, without extensions

Dock with magnification, Mission Control, a Spotlight-style launcher with clipboard history, Genie minimize, hot corners, glass with live blur. All built in and made to work together, not put together from extensions.

Everyday apps included

Files, Settings, Calendar with Google sync, Clock, Weather, and App Center for apps (RPM and Flatpak) and system updates. Screenshots, screen recording, clipboard history, the lock and login screens are built in.

Six VS Code windows grouped into one tabbed titlebar
Six VS Code windows in one titlebar.
Notification Center: a one-time code with a Copy button above other notifications, weather, system activity and world clocks
One-time codes come ready to copy, from SMS on a paired phone (over Bluetooth, no app on the phone) and from your mailboxes.
The launcher on its Apps tab, over blurred windows
Apps, recent files, clipboard history, recent VS Code projects, browser history and quick toggles in one search. A clipboard entry opens in a preview: text, files or the picture itself.
Settings showing AirPods Pro 3: battery of each earbud, noise control modes, conversational awareness and ear detection
AirPods Pro 3: battery of each earbud, noise control, and ear detection that pauses your music. Macora talks to them directly over Bluetooth.
Weather and Calendar applications open, with a magnified dock icon below
Calendar syncs with Google in the background, so reminders come even when the app is closed.
Minimize pours the window's own pixels into the dock. Genie by default, or a simple scale.
The lock screen is drawn by the compositor itself. The aurora behind it is a live shader. I may have spent too much time on it.
Smoothness

Built for smoothness

The panel, dock, launcher and notifications are drawn by the compositor itself, in the same frame as your windows, so nothing waits for another process when you move the mouse. The main loop only handles input and drawing; disk, files and system queries go to other threads, and a watchdog logs anything that still stalls. Every animation is calculated for the moment its frame really reaches the display, so it moves exactly one step per refresh, and if you interrupt it, it just continues from where it is.

1 in 200frames came late in 30 minutes of normal use (62,133 frames at 4K, 60 Hz)
1 framethe longest hiccup: no pause between two frames was longer than one missed refresh
0 framesdrawn while nothing on screen changes, so an idle desktop doesn't keep the GPU busy

Measured with macora-ctl stats on one machine (below): 4K at 60 Hz, one display, one GPU vendor. A frame is late if it shows up more than half a millisecond after its 16.7 ms slot.

Current state

Pre-alpha, but I use it every day

Daily driverMy only desktop for months now: work, browsing, games
Tested onRyzen 7 7800X3D · RTX 5070 · 4K 60 Hz · Fedora 44 · single monitor
BuiltFast, with a lot of help from AI. APIs and the config format still change

Known limitations

  • The shell runs inside the compositor process, so a shell bug can take the whole session down. In half a year of using it every day I haven't had a single crash, but the risk is there.
  • Only one display: the first connected monitor works, a second one stays dark. Also wlr-output-management is missing, so kanshi and wlr-randr can't configure outputs.
  • No input methods (CJK doesn't work) and no accessibility support yet.
  • No display sleep or suspend on idle, and no session restore.
  • Only builds from source, no RPM, COPR, Flatpak or image yet.

What's next →

Why another desktop

There are already good desktops for Linux. But I wanted one where nothing annoys me: animations that never stutter, input that answers right away, no lag anywhere, and it still looks nice. I couldn't get all of that together, so I'm building it.

Support

It's one person in free time. I read every issue, but honestly, first I fix what breaks my own day. Steps to reproduce make it much faster. Frametime numbers and reports from other hardware help the most, since I have only one machine to test on.

Install

Build from source on Fedora 44

# build dependencies: see INSTALL.md
sudo dnf install mold               # the workspace links with mold
./install.sh                        # builds, installs binaries, systemd units, portal
sudo macora-loginctl enable-greetd  # optional: Macora's login screen (reversible)

install.sh runs as your user and asks for sudo when it needs it. After that, Macora shows up in the session list of your current login screen. Macora's own login screen is optional: enable-greetd backs up your old config and restores it if something fails, and disable-greetd brings your old login manager back. Keep a TTY ready the first time, just in case. Dependencies and notes for other distros: INSTALL.md.