{"id":51836665,"url":"https://github.com/justinstimatze/rtux","last_synced_at":"2026-07-22T23:01:34.546Z","repository":{"id":371420079,"uuid":"1298664490","full_name":"justinstimatze/rtux","owner":"justinstimatze","description":"Legible, reversible memory-pressure daemon for Linux desktops — freezes runaway apps instead of killing them, and tells you what it did.","archived":false,"fork":false,"pushed_at":"2026-07-14T22:54:33.000Z","size":198,"stargazers_count":0,"open_issues_count":1,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-07-15T00:19:08.689Z","etag":null,"topics":["cgroups-v2","desktop-responsiveness","gnome-shell-extension","linux","memory-pressure","oom","psi","rust","systemd","zram"],"latest_commit_sha":null,"homepage":null,"language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/justinstimatze.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-07-12T22:31:24.000Z","updated_at":"2026-07-14T22:54:36.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/justinstimatze/rtux","commit_stats":null,"previous_names":["justinstimatze/rtux"],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/justinstimatze/rtux","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/justinstimatze%2Frtux","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/justinstimatze%2Frtux/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/justinstimatze%2Frtux/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/justinstimatze%2Frtux/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/justinstimatze","download_url":"https://codeload.github.com/justinstimatze/rtux/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/justinstimatze%2Frtux/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35780803,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-07-20T02:08:10.276Z","status":"online","status_checked_at":"2026-07-22T02:00:06.236Z","response_time":124,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cgroups-v2","desktop-responsiveness","gnome-shell-extension","linux","memory-pressure","oom","psi","rust","systemd","zram"],"created_at":"2026-07-22T23:01:33.768Z","updated_at":"2026-07-22T23:01:34.540Z","avatar_url":"https://github.com/justinstimatze.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# rtux\n\n*Here, in the dim glow of the laptop, we observe a creature in crisis.*\n\nThe machine — magnificent, capable, barely two years old — has been overwhelmed.\nIts cursor stutters across the screen, lagging seconds behind the hand that moves\nit. Windows freeze mid-gesture. The whole system, so responsive only moments ago,\nnow gasps for breath.\n\nIn the wild, this is where lesser systems perish — or where the human, in\nfrustration, reaches for the power button.\n\nBut watch closely. Something stirs at the edge of the frame.\n\n**rtux** — *the program is called `pressured`; `rtux` is the species* — is a small,\npatient creature that lives in the background of your Linux desktop. When memory\nruns short it keeps the machine feeling as fast as it truly is by *pausing* the\nrunaway app instead of killing it — reversibly — and, remarkably, telling you\nplainly what it did, then undoing it the moment the danger passes. It runs as a\nsmall `systemd` service and needs only systemd + cgroups v2 (Ubuntu, Fedora, Arch,\nand most others).\n\n**To bring it to your own machine** — a modern GNOME desktop:\n\n```sh\nsudo apt install libgtk-4-dev libadwaita-1-dev   # for the control window (Ubuntu 24.04+)\ncargo build --release --features hud\nsudo ./install.sh          # raises the guardian, offers to enable zram\n./setup-hotkey.sh          # Ctrl+Alt+P summons the control window\n./install-extension.sh     # the top-bar light (wakes at your next login)\n```\n\nOn an older or non-Ubuntu habitat, see [Bringing it home](#bringing-it-home)\nbelow. The full field journal — *why* any of this works — is [DESIGN.md](DESIGN.md).\n\n## The phenomenon: why a fast machine suddenly crawls\n\nEvery computer has a fixed amount of *fast* memory — RAM. Open enough browser\ntabs, editors, and chat windows, and it fills.\n\nHere is the cruel part. When it fills, Linux does not quietly ask the greediest\napplication to wait its turn. It begins shuffling *everyone's* memory onto the\nslow disk — evenly, indiscriminately — including the very software that draws your\ncursor. And so a machine that could handle the work with ease instead grinds to a\ncrawl, and feels cheap and old, when it is neither.\n\nThis is not a hardware failure. It is a *choice* about who gets served first. A\ncheap phone stays perfectly smooth in the same moment, because it ruthlessly\nprotects whatever you are looking at. rtux teaches your Linux desktop the same\ngood manners.\n\n## The intervention\n\nWhen memory runs short, rtux acts — gently, reversibly, and always in the open:\n\n1. **It shields the things that draw your screen.** The cursor and the desktop\n   itself are kept in fast memory no matter what, so they never stutter. Whatever\n   else is struggling, your hand and the pointer stay in step.\n2. **It has a quiet word with the greediest app.** First it simply asks that app\n   to hand back memory it isn't really using. If the pressure keeps climbing, it\n   *pauses* the app outright — freezing it whole and intact, like an animal in\n   torpor. Nothing is lost; its tabs and its work wait exactly where you left them.\n3. **It tells you, once, without fuss.** A small note appears — *\"Paused Chrome to\n   keep you fast\"* — and fades on its own. You never have to click it away.\n4. **It wakes everything back up** the instant the pressure clears. More often than\n   not, you won't even notice it happened.\n\nThe other creatures in this niche\n([earlyoom](https://github.com/rfjakob/earlyoom),\n[systemd-oomd](https://www.freedesktop.org/software/systemd/man/systemd-oomd.service.html))\nwait until things are dire and then *terminate* an app — your tabs gone, no\nwarning. rtux's whole strategy is the reversible one: pause, then un-pause. (Full\ncredit to the prior art in [DESIGN.md](DESIGN.md#prior-art--influences).)\n\n*(There is also **zram** — a clever trick that fits far more into memory by\ncompressing it, the very thing that keeps phones and Macs smooth at capacity.\nrtux's installer offers to switch it on. It is the single biggest improvement, and\nUbuntu, curiously, leaves it off by default.)*\n\n## Bringing it home\n\nThe quick-start above covers a modern GNOME desktop. A few notes for everything\nelse.\n\nThe control window needs GTK 4 and **libadwaita ≥ 1.5** (Ubuntu 24.04+, Fedora\n39+, current Arch):\n\n```sh\n# Ubuntu/Debian\nsudo apt install libgtk-4-dev libadwaita-1-dev\n# Fedora\nsudo dnf install gtk4-devel libadwaita-devel\n# Arch\nsudo pacman -S gtk4 libadwaita\n# Nix\nnix-shell -p gtk4 libadwaita\n```\n\nOn an older box — Ubuntu 22.04 ships libadwaita 1.1 — skip the window and raise\njust the guardian, which needs no graphics libraries at all:\n\n```sh\ncargo build --release        # daemon only — no GTK / libadwaita\nsudo ./install.sh\n```\n\nTwo small things: `setup-hotkey.sh` binds `Ctrl+Alt+P` and avoids `\u003cSuper\u003e`\ncombos (GNOME grabs those); the top-bar extension only appears after your next\nlogin (GNOME can't load a new extension into the running session).\n\n### Checking it took\n\n```sh\nsystemctl status rtux.service     # should say \"active (running)\"\npressured status                  # current pressure + the top consumers\npressured ctl list                # the same census the window shows\n```\n\nIf the hotkey does nothing, confirm `pressured-hud` is on your `PATH` (the full\nbuild installs it). Watch the guardian work in real time with\n`journalctl -u rtux.service -f`.\n\n## Summoning the control window\n\nPress your hotkey and a small window appears: every running app and its memory\nappetite, a live trace of pressure over the last minute, and — for any app —\ngentle, reversible actions, in order of escalating consequence:\n\n- **Pin** — keep this app fast, always.\n- **Cap** — ask it to slim down.\n- **Pause** — freeze it (wake it whenever you like).\n- **Close** — the only one you can't undo; shut it down.\n\nEverything is labelled in plain words, and every number explains itself if you\nrest the pointer on it. The window keeps *itself* in fast memory, so it always\nopens instantly — especially when the machine is struggling and you need it most.\n\n*(Prefer the terminal? `pressured ctl list` shows the same census; `pressured\nstatus` gives a quick reading of the pressure.)*\n\n## Returning it to the wild (uninstalling)\n\nrtux leaves no trace it can't undo. One script reverses the whole thing — the\nservice and binaries, the hotkey, the top-bar extension, and the zram config and\ntuning:\n\n```sh\nsudo ./uninstall.sh\n```\n\nOr just pause the guardian for now, keeping everything installed:\n\n```sh\nsudo systemctl disable --now rtux.service\n```\n\nAny memory limits the guardian set reset on the next reboot. (The zram *package*\nis left installed — remove it with your package manager if you wish.)\n\n## Field status\n\nThe full intervention has been observed in the wild: under genuine memory\npressure, rtux paused a 1.1 GB browser, held the desktop perfectly responsive, and\nreported itself — unprompted, and entirely unbothered. The thing that draws your\nscreen now has a floor it can stand on and a pulse you can read, so you can tell at\na glance whether it is resting easy or straining.\n\nThere is a subtler lesson the clearing taught, too. On a hard day rtux paused every\nheavy thing at once — correctly, by its own rules — and the desktop still felt slow,\nbecause the heavy things *were* the seven windows the human was working in. Pausing\nyour own hands is its own kind of slowness. The reversible pause is the right tool\nfor a runaway stranger; it is a blunt one for your own open work, and teaching rtux\nthat difference — to refuse a load that won't fit before it arrives, and to keep the\nwindow you're actually looking at warm while it thins the rest — is the work ahead.\nThat, along with following your gaze and letting a frozen window visibly *frost\nover* rather than send a note, is chronicled in [DESIGN.md](DESIGN.md).\n\n*The human returns to their work. The machine hums along. All is well in the\nclearing — for now.*\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjustinstimatze%2Frtux","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjustinstimatze%2Frtux","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjustinstimatze%2Frtux/lists"}