{"id":14982597,"url":"https://github.com/allanchain/sane-break","last_synced_at":"2025-10-29T16:30:42.868Z","repository":{"id":249488022,"uuid":"815501356","full_name":"AllanChain/sane-break","owner":"AllanChain","description":"Gentle break reminder that helps you avoid mindlessly skipping breaks","archived":false,"fork":false,"pushed_at":"2025-10-24T02:43:30.000Z","size":4232,"stargazers_count":49,"open_issues_count":13,"forks_count":7,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-10-24T03:36:30.568Z","etag":null,"topics":["break","qt6","reminder","wayland"],"latest_commit_sha":null,"homepage":"https://allanchain.github.io/sane-break/","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/AllanChain.png","metadata":{"files":{"readme":"README.md","changelog":null,"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":"NOTICE.md","maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"ko_fi":"allanchain"}},"created_at":"2024-06-15T10:51:26.000Z","updated_at":"2025-10-24T02:43:33.000Z","dependencies_parsed_at":"2024-07-21T09:42:41.512Z","dependency_job_id":"bed46a2c-a846-4079-add6-68e8998022af","html_url":"https://github.com/AllanChain/sane-break","commit_stats":{"total_commits":123,"total_committers":1,"mean_commits":123.0,"dds":0.0,"last_synced_commit":"3b566c876de7b2e8fab467d07b6a30ddfab72506"},"previous_names":["allanchain/sane-break"],"tags_count":35,"template":false,"template_full_name":null,"purl":"pkg:github/AllanChain/sane-break","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AllanChain%2Fsane-break","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AllanChain%2Fsane-break/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AllanChain%2Fsane-break/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AllanChain%2Fsane-break/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/AllanChain","download_url":"https://codeload.github.com/AllanChain/sane-break/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AllanChain%2Fsane-break/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":281654260,"owners_count":26538625,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-29T02:00:06.901Z","response_time":59,"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":["break","qt6","reminder","wayland"],"created_at":"2024-09-24T14:05:42.855Z","updated_at":"2025-10-29T16:30:42.862Z","avatar_url":"https://github.com/AllanChain.png","language":"C++","funding_links":["https://ko-fi.com/allanchain"],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"./resources/images/icon.svg\" width=\"150\" height=\"150\"\u003e\n\u003c/p\u003e\n\u003ch1 align=\"center\"\u003eSane Break\u003c/h1\u003e\n\u003cp align=center\u003e\n  \u003ca href=\"https://github.com/AllanChain/sane-break/releases\"\u003e\n    \u003cimg src=\"https://img.shields.io/github/v/release/AllanChain/sane-break\" alt=\"GitHub release\"\u003e\n  \u003c/a\u003e\n  \u003cimg src=\"https://img.shields.io/badge/built_with-Qt_6-Qt\" alt=\"Built with Qt 6\"\u003e\n  \u003ca href=\"https://flathub.org/apps/io.github.AllanChain.sane-break\"\u003e\n    \u003cimg src=\"https://img.shields.io/flathub/downloads/io.github.AllanChain.sane-break?logo=flathub\" alt=\"Flathub Downloads\"\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://github.com/AllanChain/sane-break/releases\"\u003e\n    \u003cimg src=\"https://img.shields.io/github/downloads/AllanChain/sane-break/total?logo=github\u0026color=black\" alt=\"total downloads\"\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://hosted.weblate.org/engage/sane-break/\"\u003e\n    \u003cimg src=\"https://hosted.weblate.org/widget/sane-break/sane-break/svg-badge.svg\" alt=\"Translation status\" /\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\nSane Break is a cross-platform break reminder designed to help you take meaningful breaks without disrupting your workflow.\n\n\u003ca href=\"https://apps.microsoft.com/detail/9n1c3x5dwhxx?referrer=appbadge\u0026mode=direct\"\u003e\n  \u003cimg width=\"200\" src=\"https://get.microsoft.com/images/en-us%20dark.svg\"\u003e\n\u003c/a\u003e\n\u0026nbsp;\n\u003ca href=\"https://apps.apple.com/us/app/sane-break/id6740942634\"\u003e\n  \u003cimg height=\"55\" alt=\"Download on the Mac App Store\" src=\"https://github.com/user-attachments/assets/2b6f067b-d275-4a2f-ba13-4fb9c6bd63fe\"\u003e\n\u003c/a\u003e\n\u0026nbsp;\n\u003ca href=\"https://flathub.org/apps/io.github.AllanChain.sane-break\"\u003e\n  \u003cimg height=\"55\" alt=\"Get it on Flathub\" src=\"https://flathub.org/api/badge?locale=en\"\u003e\n\u003c/a\u003e\n\n## 🤔 Why another break reminder?\n\nMost break reminder apps send notifications before the break is scheduled, but that merely informs me that a break is _going to happen_, rather than telling me it's _happening right now_. Even with a warning, when the break actually happens I'm too often deeply focused on a task. Then, the program either forces the break, interrupting my work, or I can use a \"skip\" or \"postpone\" button. Accepting abrupt interruption is too harsh, so I tend to click \"skip\" or \"postpone\". Then, that becomes an almost instinctive habit, and before I know it, hours have passed without a single break.\n\nIn contrast, Sane Break allows me to take ownership of _when_ to stop and break. It starts by providing a gentle, non-intrusive reminder through a flashing window. The break officially begins as soon as I naturally pause after finishing my current task. This way, Sane Break offers the flexibility to wrap up my work and take a break on my terms, rather than forcing an abrupt interruption.\n\nSane Break aims to strike a balance between respecting your workflow and ensuring you take the breaks you need.\n\nFor more details about the motivation behind Sane Break, you can refer to [No break reminder works (for me)](https://allanchain.github.io/blog/post/sane-break-intro/).\n\n## Two phase system\n\nSane Break uses a two-phase system:\n\n- Phase 1: A small, unobtrusive reminder that encourages you to find a good stopping point.\n- Phase 2: The reminder grows to full screen during the actual break.\n\nTransition to phase 2 happens when you stop working on your computer, or when you ignore the reminder and keep working for too long (configurable).\n\nThis design was inspired by [RSIBreak](https://apps.kde.org/rsibreak/) and has similarities to [WorkRave](https://workrave.org/). Sane Break has some other improvements:\n\n- No big buttons for skipping or postponing to avoid mindless dismissals.\n- [Cross-platform support](#installation)\n- modern framework and UI style built with Qt6\n\n## 🎬 Demo video\n\nhttps://github.com/user-attachments/assets/35002673-ce83-4848-bd5e-6cc6dbbd4c8c\n\n\u003cdetails\u003e\n  \u003csummary\u003e📷 \u003cb\u003eScreenshots\u003c/b\u003e\u003c/summary\u003e\n\n![flashing](https://github.com/user-attachments/assets/1ec11caf-3b3d-4429-881d-4d909ec4c3c7)\n![fullscreen](https://github.com/user-attachments/assets/59164505-3446-4ef7-b0e0-5ffe0a607c44)\n![macos](https://github.com/user-attachments/assets/2f28406e-0601-4786-ab5d-194a7cfae050)\n\n\u003c/details\u003e\n\n## Installation\n\n### macOS\n\nSane Break is available on [App Store](https://apps.apple.com/us/app/sane-break/id6740942634)\n\n### Windows\n\nDownload the Windows package (`sane-break-windows.zip`) from the [release page](https://github.com/AllanChain/sane-break/releases) and extract it. Put the `.exe` executable anywhere you like. x86 version of Windows 10 or newer is supported. Older versions may be supported too.\n\n### Linux\n\nSane Break requires Qt\u003e=6.4 for X11 support and Qt\u003e=6.6 for Wayland support.\nIt works best on KDE Wayland, and X11 is also fully supported.\nSane Break will also work with Wayland compositors with [wlr layer shell](https://wayland.app/protocols/wlr-layer-shell-unstable-v1) and [idle notify](https://wayland.app/protocols/ext-idle-notify-v1) protocols support.\nAlthough GNOME Wayland does not support these protocols, some special workaround are made so that Sane Break will work with GNOME.\n\n#### Precompiled packages\n\n##### Flatpak\n\nSane Break can be installed from Flathub with\n\n```bash\nflatpak install flathub io.github.AllanChain.sane-break\n```\n\nNote that if you are using GNOME, please download the GNOME shell extension for Sane Break from the [release page](https://github.com/AllanChain/sane-break/releases) and run:\n```bash\ngnome-extensions install sane-break-gnome-extension.zip\ngnome-extensions enable sane-break@allanchain.github.io\n```\nYou may need to logout and login from the Wayland session to make the extension work.\n\n##### .deb packages\n\nIf you are using Ubuntu 24.10 (and above) or Debian Trixie (and above), you can install the `.deb` package directly from the [release page](https://github.com/AllanChain/sane-break/releases) since `v0.6.0`. And make sure to enable the GNOME shell extension with:\n```bash\ngnome-extensions enable sane-break@allanchain.github.io\n```\n\nThe difference between Wayland Ubuntu Oracular build and Debian Trixie build is the layer shell support. If you are using a Debian-based distro and a Wayland compositor with layer shell protocol support (e.g. KDE Neon), you probably need the Debian Trixie build. Otherwise, the Ubuntu Oracular build is good to go.\n\n##### RPM packages from Copr\n\nIf you are using Fedora or similar distros, you can install Sane Break from [Copr](https://copr.fedorainfracloud.org/coprs/allanchain/sane-break/):\n\n```bash\nsudo dnf copr enable allanchain/sane-break\nsudo dnf install sane-break\n```\n\nFor GNOME users, sure to enable the GNOME shell extension with:\n```bash\ngnome-extensions enable sane-break@allanchain.github.io\n```\n\nYou can contribute to the package by submitting PR to https://github.com/AllanChain/sane-break.spec\n\n##### AppImage version\n\nStarting from `v0.9.0`, Sane Break also provides an experimental AppImage binary. It has several known limitations such as doesn't respect system themes. We are open to contributions to improve the AppImage version.\n\n#### Compiling from source\n\nAssume all required packages described below is installed, you can use the following commands to compile and install Sane Break.\n\n```bash\ngit clone https://github.com/AllanChain/sane-break\ncd sane-break\nmkdir build\ncd build\ncmake ..\ncmake --build . --parallel\nsudo cmake --install .\n```\n\nThe above command will automatically enable X11 or Wayland support based on libraries found.\n\nTo build with translations, install `qt6-tools` package (name may vary across distros).\n\n##### Arch-based distros\n\nFor Arch-based distros, it's recommended to directly install the AUR package:\n```bash\nyay -S sane-break\n```\n\nIf you want to build it manually, make sure the following packages are installed:\n```bash\nyay -S qt6-base qt6-multimedia\nyay -S libxss # X support\nyay -S layer-shell-qt # Wayland support\n```\n\nIf you want to enable just X11 or Wayland support, you are strongly encouraged to install Sane Break by compiling from source.\n\n##### Debian-based distros\n\nFor KDE users (e.g. KDE Neon), just install\n```bash\napt install qt6-base-dev qt6-multimedia-dev\napt install libxss-dev # X support\napt install qt6-wayland-dev liblayershellqtinterface-dev # Wayland support\n```\n\nFor GNOME users, `liblayershellqtinterface-dev` is optional, and please make sure to enable the GNOME shell extension `sane-break@allanchain.github.io` after building and installing Sane Break.\n\n##### Others\n\nFor Guix (see also [#23](https://github.com/AllanChain/sane-break/issues/23)):\n```bash\nguix shell --container make cmake gcc-toolchain pkg-config vulkan-headers \\\n  qtbase@6 qtmultimedia \\\n  libxkbcommon libxscrnsaver libx11 \\  # X support\n  layer-shell-qt qtwayland@6 wayland   # Wayland support\n```\n\n## FAQ\n\n### What if I really want to skip a break?\n\nYou can postpone or quit via tray icon before Sane Break enters force break mode. If it's already in the force break mode, you can first click \"Exit Force Break\" and then postpone via tray icon.\n\n### Will Sane Break pause when I'm away?\n\nYes, Sane Break will automatically pause and stop prompting breaks if there is no user input for a configurable amount of time, determined by the \"Pause if idle for\" setting. Additionally, if the idle time extends beyond a certain threshold, Sane Break will reset the break timer and break cycle, starting from a small break. These thresholds can be configured using the \"Reset break after paused for\" and \"Reset cycle after paused for\" settings.\n\n**Note for Wayland** (and possibly other platforms): Some applications, such as mpv, simulate user inputs to prevent the computer from sleeping automatically. Sane Break cannot distinguish between simulated and real inputs, so it will treat these simulations as active use. This means breaks can still occur while watching videos.\n\n### Where are settings stored?\n\nThe default locations for settings are:\n- On Linux and macOS: ` ~/.config/SaneBreak/SaneBreak.ini`\n- On Windows: `%APPDATA%\\SaneBreak\\SaneBreak.ini`\n\nBeside default locations, Qt also supports reading settings from [other locations](https://doc.qt.io/qt-6/qsettings.html#locations-where-application-settings-are-stored).\n\nIf you want to make Sane Break portable, especially on Windows, you can put an empty file named `SaneBreak.ini` next to the `.exe` file and Sane Break will automatically pick that file for settings.\n\n## Contributing\n\n### Translations\n\n\u003ca href=\"https://hosted.weblate.org/engage/sane-break/\"\u003e\n\u003cimg src=\"https://hosted.weblate.org/widget/sane-break/sane-break/open-graph.png\" alt=\"Translation status\" /\u003e\n\u003c/a\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fallanchain%2Fsane-break","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fallanchain%2Fsane-break","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fallanchain%2Fsane-break/lists"}