{"id":50523062,"url":"https://github.com/Aboudjem/Sleepless","last_synced_at":"2026-06-20T00:00:54.563Z","repository":{"id":361801403,"uuid":"1255870526","full_name":"Aboudjem/Sleepless","owner":"Aboudjem","description":"Keep your MacBook awake with the lid closed, on battery, with no external display. A tiny native menu-bar app with a battery-floor auto-off.","archived":false,"fork":false,"pushed_at":"2026-06-01T09:37:18.000Z","size":2813,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-01T11:17:43.079Z","etag":null,"topics":["appkit","battery","caffeine","clamshell","keep-awake","macos","menu-bar","pmset","sf-symbols","sleep","swift"],"latest_commit_sha":null,"homepage":null,"language":"Swift","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/Aboudjem.png","metadata":{"files":{"readme":"README.de.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","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-06-01T08:46:53.000Z","updated_at":"2026-06-01T09:37:22.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/Aboudjem/Sleepless","commit_stats":null,"previous_names":["aboudjem/sleepless"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/Aboudjem/Sleepless","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Aboudjem%2FSleepless","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Aboudjem%2FSleepless/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Aboudjem%2FSleepless/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Aboudjem%2FSleepless/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Aboudjem","download_url":"https://codeload.github.com/Aboudjem/Sleepless/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Aboudjem%2FSleepless/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34552295,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-19T02:00:06.005Z","response_time":61,"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":["appkit","battery","caffeine","clamshell","keep-awake","macos","menu-bar","pmset","sf-symbols","sleep","swift"],"created_at":"2026-06-03T06:00:31.031Z","updated_at":"2026-06-20T00:00:54.539Z","avatar_url":"https://github.com/Aboudjem.png","language":"Swift","funding_links":[],"categories":["ユーティリティ","Menubar"],"sub_categories":["システム関連ツール","Text"],"readme":"\u003c!-- Language switcher. Keep this row identical across every README.\u003clang\u003e.md. --\u003e\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"README.md\"\u003eEnglish\u003c/a\u003e \u0026nbsp;·\u0026nbsp;\n  \u003ca href=\"README.zh-CN.md\"\u003e简体中文\u003c/a\u003e \u0026nbsp;·\u0026nbsp;\n  \u003ca href=\"README.es.md\"\u003eEspañol\u003c/a\u003e \u0026nbsp;·\u0026nbsp;\n  \u003ca href=\"README.ja.md\"\u003e日本語\u003c/a\u003e \u0026nbsp;·\u0026nbsp;\n  \u003ca href=\"README.fr.md\"\u003eFrançais\u003c/a\u003e \u0026nbsp;·\u0026nbsp;\n  \u003cb\u003eDeutsch\u003c/b\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cpicture\u003e\n    \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"assets/hero-dark.gif\"\u003e\n    \u003csource media=\"(prefers-color-scheme: light)\" srcset=\"assets/hero-light.gif\"\u003e\n    \u003cimg alt=\"Sleepless: keep your Mac awake with the lid closed\" src=\"assets/hero-light.gif\" width=\"780\"\u003e\n  \u003c/picture\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cb\u003eHalte dein MacBook bei geschlossenem Deckel wach, im Akkubetrieb, ohne externen Bildschirm.\u003c/b\u003e\u003cbr\u003e\n  \u003csub\u003eEin Schalter in der Menüleiste, mit Abschalt-Timer und Abschaltung bei Akku-Mindeststand, damit du ihn nie ganz leerziehst.\u003c/sub\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/Aboudjem/Sleepless/actions/workflows/ci.yml\"\u003e\u003cimg alt=\"CI\" src=\"https://img.shields.io/github/actions/workflow/status/Aboudjem/Sleepless/ci.yml?branch=main\u0026label=CI\u0026logo=githubactions\u0026logoColor=white\u0026style=flat-square\u0026color=8B5CF6\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/Aboudjem/Sleepless/releases/latest\"\u003e\u003cimg alt=\"Release\" src=\"https://img.shields.io/github/v/release/Aboudjem/Sleepless?label=release\u0026logo=apple\u0026logoColor=white\u0026style=flat-square\u0026color=8B5CF6\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/Aboudjem/Sleepless/releases\"\u003e\u003cimg alt=\"Downloads\" src=\"https://img.shields.io/github/downloads/Aboudjem/Sleepless/total?label=downloads\u0026style=flat-square\u0026color=6366F1\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/Aboudjem/Sleepless/stargazers\"\u003e\u003cimg alt=\"Stars\" src=\"https://img.shields.io/github/stars/Aboudjem/Sleepless?style=flat-square\u0026color=6366F1\"\u003e\u003c/a\u003e\n  \u003ca href=\"LICENSE\"\u003e\u003cimg alt=\"License: MIT\" src=\"https://img.shields.io/badge/license-MIT-D946EF?style=flat-square\"\u003e\u003c/a\u003e\n  \u003cimg alt=\"Platform: macOS 26, Apple Silicon\" src=\"https://img.shields.io/badge/macOS%2026-Apple%20Silicon-8B5CF6?style=flat-square\u0026logo=apple\u0026logoColor=white\"\u003e\n\u003c/p\u003e\n\u003cp align=\"center\"\u003e\n  \u003cimg alt=\"Build provenance: attested (SLSA)\" src=\"https://img.shields.io/badge/build%20provenance-attested-8B5CF6?style=flat-square\u0026logo=githubactions\u0026logoColor=white\"\u003e\n  \u003cimg alt=\"Checksums: SHA-256\" src=\"https://img.shields.io/badge/checksums-SHA--256-6366F1?style=flat-square\"\u003e\n  \u003cimg alt=\"Telemetry: none\" src=\"https://img.shields.io/badge/telemetry-none-D946EF?style=flat-square\"\u003e\n  \u003ca href=\"https://github.com/Aboudjem/homebrew-tap\"\u003e\u003cimg alt=\"Install: Homebrew cask\" src=\"https://img.shields.io/badge/homebrew-cask-8B5CF6?style=flat-square\u0026logo=homebrew\u0026logoColor=white\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cimg alt=\"Sleepless demo: flip the switch, set an auto-off timer, drag the battery-floor slider\" src=\"assets/demo.gif\" width=\"760\"\u003e\n\u003c/p\u003e\n\n\u003e [!NOTE]\n\u003e Ein geschlossener Deckel schickt deinen Mac in den Ruhezustand, und `caffeinate`-Apps (KeepingYouAwake und Co.) können das von Haus aus nicht ändern. Sleepless legt die eine Einstellung um, die es kann, `pmset disablesleep`, mit Sicherheitsnetzen, sodass du es bedenkenlos vergessen kannst.\n\n## Installation\n\n```sh\nbrew install --cask aboudjem/tap/sleepless\n/Applications/Sleepless.app/Contents/Resources/grant.sh   # one-time passwordless grant\n```\n\n| Weitere Wege | |\n|---|---|\n| **Herunterladen** | Hol dir das [latest release](https://github.com/Aboudjem/Sleepless/releases/latest), entpacke es nach `/Applications` und bestätige es dann unter **Systemeinstellungen → Datenschutz \u0026 Sicherheit → Trotzdem öffnen** (es ist ad-hoc signiert). |\n| **Aus dem Quellcode bauen** | `git clone https://github.com/Aboudjem/Sleepless.git \u0026\u0026 cd Sleepless \u0026\u0026 ./install.sh` (kein Gatekeeper-Hinweis). |\n\nKlicke dann auf die Tasse in der Menüleiste, lege den Schalter um und schließe den Deckel.\n\n## Funktionen\n\n| | | |\n|---|---|---|\n| ☕ | **Ein Schalter** | Klicke auf die Tasse in der Menüleiste, lege den Schalter um. |\n| ⏲️ | **Abschalt-Timer** | 1 h oder 2 h mit laufendem Countdown, danach aus. |\n| 🔋 | **Akku-Mindeststand** | Auto-Abschaltung bei 5–50 % im Akkubetrieb (Standard 15 %). |\n| 🪫 | **Low Power Mode** | Tritt zur Seite, wenn LPM im Akkubetrieb aktiv ist. |\n| 🖥️ | **Kein Dongle** | Deckel geschlossen, im Akkubetrieb. Kein Monitor, kein HDMI-Stecker. |\n| 🚀 | **Beim Anmelden starten** | Optional, standardmäßig aus, startet immer ausgeschaltet. |\n| 🪶 | **Winzig und nativ** | Eine AppKit-Datei. Kein Dock-Symbol, kein Daemon, keine kext. |\n\n**Menüleisten-Glyph:** leere Tasse = aus · volle Tasse = wach · volle Tasse mit Punkt = wach im Akkubetrieb (Auto-Abschaltung aktiv).\n\n## Sleepless im Vergleich zu den Alternativen\n\n| | **Sleepless** | Amphetamine | KeepingYouAwake | `caffeinate` |\n|---|:---:|:---:|:---:|:---:|\n| Wach, Deckel geschlossen, kein Monitor | ✅ ¹ | ⚠️ ² | ❌ ³ | ❌ |\n| Im Akkubetrieb | ✅ | ✅ | ✅ Deckel offen | ⚠️ ⁴ |\n| Abschalt-Timer | ✅ | ✅ | ✅ | ❌ |\n| Auto-Abschaltung bei niedrigem Akku | ✅ | ✅ | ✅ | ❌ |\n| Open Source | ✅ MIT | ❌ App Store | ✅ MIT | Apple |\n| Kosten | Kostenlos | Kostenlos | Kostenlos | Kostenlos |\n\n\u003csub\u003eStand 2026-06. ¹ Nutzt `pmset disablesleep` und liest das Flag zurück; das Verhalten hängt von Hardware und macOS-Version ab. ² Dokumentiert einen Modus für geschlossenen Bildschirm, versagt aber Berichten zufolge häufig auf Apple Silicon bei Wechsel der Stromquelle ([AE #28](https://github.com/x74353/Amphetamine-Enhancer/issues/28)); die App ist Closed Source. ³ Kann konzeptbedingt nicht bei geschlossenem Deckel arbeiten, da es `caffeinate` umhüllt ([#66](https://github.com/newmarcel/KeepingYouAwake/issues/66)). ⁴ `caffeinate -i` läuft im Akkubetrieb; `-s` nur am Netzteil.\u003c/sub\u003e\n\n## Setze es ein, um\n\n- 🤖 Lange Jobs bei geschlossenem Deckel zu Ende zu bringen: Agenten-Läufe, Builds, Renders, ML-Training.\n- 📡 Einen Hotspot aus deiner Tasche zu teilen.\n- ⬇️ Große Downloads, Uploads oder Backups weiterlaufen zu lassen.\n- 🖥️ Einen lokalen Server oder eine SSH-Sitzung erreichbar zu halten.\n\n\u003e [!TIP]\n\u003e Setze einen Akku-Mindeststand, dem du vertraust (etwa 20 %), plus einen Timer, dann kannst du weggehen, ohne den Akku im Auge behalten zu müssen.\n\n## So funktioniert es\n\nSleepless schaltet `pmset disablesleep` um (das `SleepDisabled`-Flag des Kernels), liest es zurück, sodass die Menüleiste nie lügt, und setzt es bei deinem Akku-Mindeststand, im Low Power Mode, beim Ablaufen des Timers oder beim Neustart zurück. Eine GUI-App kann kein Passwort eintippen, deshalb fügt das Installationsprogramm eine eng gefasste sudoers-Regel für **genau zwei Befehle** hinzu:\n\n```\n\u003cyou\u003e ALL=(root) NOPASSWD: /usr/bin/pmset -a disablesleep 0, /usr/bin/pmset -a disablesleep 1\n```\n\n- **Lässt sich nicht ausweiten.** sudoers gleicht Argumente wörtlich ab, ohne Platzhalter.\n- **Nichts zum Kapern.** Kein Daemon, kein Hilfsskript, keine Shell. Es ruft `/usr/bin/pmset` direkt auf.\n- **Immer reversibel.** Neustart, der Mindeststand, der Timer oder `./uninstall.sh` (das belegt, dass die Berechtigung weg ist).\n\nEinen Download überprüfen, kein Apple-Konto nötig:\n\n```sh\nshasum -a 256 -c SHA256SUMS\ngh attestation verify Sleepless-*.zip -R Aboudjem/Sleepless\n```\n\nVollständiges Bedrohungsmodell, das Urteil zum App Store und die Audit-Anleitung: [SECURITY.md](SECURITY.md) · [docs/AUDIT.md](docs/AUDIT.md).\n\n## FAQ\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eFunktioniert \u003ccode\u003epmset disablesleep\u003c/code\u003e auf Apple Silicon (M1/M2/M3) noch?\u003c/b\u003e\u003c/summary\u003e\n\nJa, auf macOS 26.3 bestätigt. `pmset -a disablesleep 1` setzt das `SleepDisabled`-Flag des Kernels auf Apple Silicon und hält den Mac bei geschlossenem Deckel im Akkubetrieb wach. Prüfe es mit `pmset -g | grep SleepDisabled` (es sollte `1` anzeigen). Behauptungen, es habe \"aufgehört zu funktionieren\", beschreiben meist `caffeinate` oder Apps auf caffeinate-Basis, einen anderen Mechanismus.\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eWarum geht mein Mac beim Schließen des Deckels in den Ruhezustand, sogar mit Amphetamine oder KeepingYouAwake?\u003c/b\u003e\u003c/summary\u003e\n\nDiese nutzen die Power Assertions von macOS, die den Leerlauf-Timer stoppen, aber den Hardware-Trigger beim Schließen des Deckels nicht überstimmen können. KeepingYouAwake umhüllt `caffeinate`, das nicht bei geschlossenem Deckel arbeiten kann ([#66](https://github.com/newmarcel/KeepingYouAwake/issues/66)). `pmset disablesleep`, das Sleepless nutzt, kann es.\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eIst es sicher? Überhitzt es oder zieht es den Akku leer?\u003c/b\u003e\u003c/summary\u003e\n\nFür leichte, unbeaufsichtigte Arbeit (Downloads, Synchronisierungen, einen Hotspot) ist es sicher. Schwere Dauerlast bei ganz geschlossenem Deckel verringert den Luftstrom, geh also mit Augenmaß vor. Der Akku-Mindeststand, die Auto-Abschaltung im Low Power Mode und der Timer stoppen es alle, bevor es den Mac leerzieht.\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eBraucht es sudo, eine Kernel-Erweiterung oder einen Daemon?\u003c/b\u003e\u003c/summary\u003e\n\nEine eng gefasste `sudo`-Berechtigung (zwei exakte `pmset`-Befehle), damit eine GUI-App die Einstellung ohne Abfrage umlegen kann. Keine Kernel-Erweiterung, kein Daemon. Die ganze App ist eine einzige AppKit-Datei.\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eWie stoppe oder entferne ich es?\u003c/b\u003e\u003c/summary\u003e\n\nLeg den Schalter auf aus, oder lass den Timer oder den Akku-Mindeststand abschalten, und der normale Ruhezustand kehrt zurück. Ein Neustart setzt es ebenfalls zurück. `./uninstall.sh` entfernt die App, den Anmelde-Eintrag und die sudoers-Berechtigung und belegt dann, dass die Berechtigung weg ist.\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eWarum ist es nicht notarisiert?\u003c/b\u003e\u003c/summary\u003e\n\nEs ist ein persönliches, quelloffenes Werkzeug ohne bezahlte Apple Developer ID, also ist es ad-hoc signiert. Baue es aus dem Quellcode, um Gatekeeper zu umgehen, oder nutze **Trotzdem öffnen** für die vorgefertigte App. Die Notarisierungsschritte sind in [docs/AUDIT.md](docs/AUDIT.md) dokumentiert.\n\u003c/details\u003e\n\n## Mitwirken\n\nIssues und PRs sind willkommen, besonders Übersetzungen und Berichte von anderer Hardware. Siehe [CONTRIBUTING.md](CONTRIBUTING.md) und den [Code of Conduct](CODE_OF_CONDUCT.md). Sleepless bleibt bewusst klein.\n\n## Lizenz\n\n[MIT](LICENSE) © 2026 Adam Boudjemaa.\n\n\u003cp align=\"center\"\u003e\n  \u003csub\u003eWenn Sleepless dir einen Ausflug ins Terminal erspart hat, hilft ein ⭐ anderen, es zu finden.\u003c/sub\u003e\n\u003c/p\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FAboudjem%2FSleepless","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FAboudjem%2FSleepless","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FAboudjem%2FSleepless/lists"}