safeeyes


Namesafeeyes JSON
Version 3.0.0 PyPI version JSON
download
home_pageNone
SummaryProtect your eyes from eye strain using this continuous breaks reminder.
upload_time2025-08-24 20:02:42
maintainerNone
docs_urlNone
authorNone
requires_python>=3.10
licenseNone
keywords linux utility health eye-strain safe-eyes
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            <img src="https://raw.githubusercontent.com/slgobinath/SafeEyes/master/safeeyes/platform/icons/hicolor/64x64/apps/io.github.slgobinath.SafeEyes.png" align="left">

# Safe Eyes

[![Release](https://img.shields.io/github/v/release/slgobinath/SafeEyes)](https://github.com/slgobinath/SafeEyes/releases)
[![PyPI version](https://badge.fury.io/py/safeeyes.svg)](https://badge.fury.io/py/safeeyes)
[![Debian](https://badges.debian.net/badges/debian/unstable/safeeyes/version.svg)](https://packages.debian.org/unstable/safeeyes)
[![AUR](https://img.shields.io/aur/version/safeeyes)](https://aur.archlinux.org/packages/safeeyes)
[![Flathub](https://img.shields.io/flathub/v/io.github.slgobinath.SafeEyes)](https://flathub.org/apps/details/io.github.slgobinath.SafeEyes)
[![Translation status](https://hosted.weblate.org/widgets/safe-eyes/-/translations/svg-badge.svg)](https://hosted.weblate.org/engage/safe-eyes/?utm_source=widget)
[![Awesome Humane Tech](https://raw.githubusercontent.com/humanetech-community/awesome-humane-tech/main/humane-tech-badge.svg?sanitize=true)](https://github.com/humanetech-community/awesome-humane-tech)

Protect your eyes from eye strain using this simple and beautiful, yet extensible break reminder.

Visit the official site: https://slgobinath.github.io/SafeEyes/ for more details.

## Safe Eyes command-line arguments

```text
usage: safeeyes [-h] [-a | -d | -e | -q | -s | -t] [--debug] [--version]

Safe Eyes protects your eyes from eye strain (asthenopia) by reminding you to
take breaks while you're working long hours at the computer.

optional arguments:
  -h, --help        show this help message and exit
  -a, --about       show the about dialog
  -d, --disable     disable the currently running safeeyes instance
  -e, --enable      enable the currently running safeeyes instance
  -q, --quit        quit the running safeeyes instance and exit
  -s, --settings    show the settings dialog
  -t, --take-break  take a break now
  --debug           start safeeyes in debug mode
  --status          print the status of running safeeyes instance and exit
  --version         show program's version number and exit
```

## Installation guide

Safe Eyes is available on the official repositories of many popular the distributions.

<a href="https://repology.org/project/safeeyes/versions">
    <img src="https://repology.org/badge/vertical-allrepos/safeeyes.svg" alt="Packaging status" align="right">
</a>

It is also available in Ubuntu PPA, Arch AUR and Python PyPI. You can choose any installation source and install on any Linux system with Python 3.


### Ubuntu, Linux Mint and other Ubuntu Derivatives

The [Official PPA for Safe Eyes](https://launchpad.net/~safeeyes-team/+archive/ubuntu/safeeyes) hosts the latest version of safeeyes **for Ubuntu 22.04 and above**. 
```bash
sudo add-apt-repository ppa:safeeyes-team/safeeyes
sudo apt update
sudo apt install safeeyes
```

On older versions of Ubuntu, an older version of Safe Eyes is available on the official repositories.
```bash
sudo apt install safeeyes
```

### Arch

```bash
yay -S safeeyes
```

### Gentoo

```bash
sudo emerge -av x11-misc/safeeyes
```

### Debian

```bash
sudo apt-get install safeeyes
```

### Fedora
Available on the [praiskup/safeeyes](https://copr.fedorainfracloud.org/coprs/praiskup/safeeyes/) COPR maintained by @praiksup

```bash
sudo dnf -y copr enable praiskup/safeeyes
sudo dnf -y install python3-safeeyes
```
For smart pause plugin, you may have to install the latest xprintidle from: [alonid/xprintidle](https://copr.fedorainfracloud.org/coprs/alonid/xprintidle/)

### OpenSUSE Tumbleweed

```bash
sudo zypper refresh
sudo zypper install safeeyes
```

### Alpine Linux

```bash
sudo apk add safeeyes
```

### Chrome OS
[Enable the Linux container](https://support.google.com/chromebook/answer/9145439?hl=en) (which is actually Debian), and install Safe Eyes with
```
sudo apt install safeeyes
```
While no tray icon is available, if you run the app, it will function in the background and will show breaks as usual. You can also change the settings by clicking on the Safe Eyes icon from the menu while the app is running, or by running the command `safeeyes -s`.

### Flatpak
**Warning**: Many plugins and features don't work well in the flatpak. We recommend that you use one of the native packages listed above. Flatpak-only bugs should be reported at https://github.com/flathub/io.github.slgobinath.SafeEyes.
```bash
flatpak install flathub io.github.slgobinath.SafeEyes
```

### Other Linux & Run from source

Ensure to meet the following dependencies:

- gir1.2-notify-0.7
- gir1.2-gtk-4.0
- python3-babel
- python3-croniter
- python3-gi
- python3-packaging
- python3-xlib
- python3-pywayland (optional for KDE/other wayland)
- xprintidle (optional for X11)
- wlrctl (optional for wayland/wlroots)
- Python 3.10+

**To install Safe Eyes from PyPI:**

```bash
sudo pip3 install safeeyes
```

After installation, restart your system to update the icons,

**To run from source:**

```bash
git clone https://github.com/slgobinath/SafeEyes.git
cd SafeEyes
python3 -m safeeyes
```

Safe Eyes installers install the required icons to `/usr/share/icons/hicolor`. When you run Safe Eyes from source without, some icons may not appear.

Note that on Wayland, this may still not be enough to get window icons working properly, as Wayland requires the .desktop file to match the running application, which is hard to do when running from source. If at all possible, prefer using an installed package.


### Install in a virtual environment

Some Linux systems like CentOS do not have matching dependencies available in their repository. In such systems, you can install and use Safe Eyes in a Python virtual environment.

1. Install the necessary dependencies for CentOS 7

    ```bash
    sudo yum install python3-devel cairo cairo-devel cairomm-devel libjpeg-turbo-devel pango pango-devel pangomm pangomm-devel gobject-introspection-devel cairo-gobject-devel
    ```

2. Create a virtual environment in your home folder

    ```bash
    mkdir ~/safeeyes
    cd ~/safeeyes/

    python3 -m venv venv
    source venv/bin/activate
    pip3 install safeeyes
    ```

3. Start Safe Eyes from the terminal

    ```bash
    cd ~/safeeyes & source venv/bin/activate
    python3 -m safeeyes
    ```

For more details, please check the issue: [#329](https://github.com/slgobinath/SafeEyes/issues/329)

This method has the same caveats about icons/window icons as running from source.

## Features

- Remind you to take breaks with exercises to reduce RSI
- Disable keyboard during breaks
- Notification before and after breaks
- Smart pause if system is idle
- Multi-screen support
- Customizable user interface
- Command-line arguments to control the running instance
- Customizable using plug-ins

## Third-party Plugins

Thirdparty plugins are available at another GitHub repository: [safeeyes-plugins](https://github.com/slgobinath/safeeyes-plugins). More details about how to write your own plugin and how to install third-party plugin are available there.

## Local development

When adding new translatable strings in the source code, make sure to run `python validate_po.py --extract` to add them to the translation template. You will need to install `python3-polib` for this.

Examples for translatable strings are `_("This is a string")` in Python code, or `<property name="label" translatable="yes">This is a label</property>` in Glade/xml files.

To ensure the new strings are well-formed, you can use `python validate_po.py --validate`.

To ensure that the coding and formatting guidelines are followed, install [ruff](https://docs.astral.sh/ruff/) and run `ruff check` and `ruff format --check` to check for issues, as well as `ruff check --fix` and `ruff format` to autofix them.

To ensure that any types are correct, install [mypy](https://github.com/python/mypy) and run `mypy safeeyes`.

To ensure that the tests still pass, install [pytest](https://docs.pytest.org/en/stable/) and run `pytest`.

The last four checks are also run in CI, so a PR must pass all the tests for it to be mmerged.

It is also possible to use dependency groups to install the needed dependencies. When using a new enough version of pip, run `pip install --group types` to install all dependencies to run the type check.
The available dependency groups can be found in the `pyproject.toml` file.

## How to Release?

0. Run `update-po.sh` to generate new translation files (which will be eventually updated by translators). Commit and push the changes to the master branch.
1. Checkout the latest commits from the `master` branch
2. Run `python3 -m safeeyes` to make sure nothing is broken
3. Update the Safe Eyes version in the following places (Open the project in VSCode and search for the current version):
    - [pyproject.toml](https://github.com/slgobinath/SafeEyes/blob/master/pyproject.toml#L4)
    - [pyproject.toml](https://github.com/slgobinath/SafeEyes/blob/master/pyproject.toml#L35)
    - [io.github.slgobinath.SafeEyes.metainfo.xml](https://github.com/slgobinath/SafeEyes/blob/master/safeeyes/platform/io.github.slgobinath.SafeEyes.metainfo.xml#L56)
    - [about_dialog.glade](https://github.com/slgobinath/SafeEyes/blob/master/safeeyes/glade/about_dialog.glade#L74)
4. Update the [changelog](https://github.com/slgobinath/SafeEyes/blob/master/debian/changelog) (for Ubuntu PPA release)
5. Commit the changes to `master`
6. Create a pull-request from `master` to `release`
7. Merge the PR to release **with merge commit** (Important to merge with merge commit)

## How you can help improving translation of Safe Eyes

First check if translations for your language are already available on [Weblate](https://hosted.weblate.org/engage/safe-eyes/), which is the cloud based translation platform we use. 

- If the language is already there, feel free to add new translations or improve the existing ones.
- If it is not there, please [open an issue](https://github.com/slgobinath/SafeEyes/issues) in Github so that we can add your language to Weblate.

## License

GNU General Public License v3

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "safeeyes",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.10",
    "maintainer_email": null,
    "keywords": "linux utility health eye-strain safe-eyes",
    "author": null,
    "author_email": "Gobinath Loganathan <slgobinath@gmail.com>",
    "download_url": "https://files.pythonhosted.org/packages/65/15/b7c4cf59a5c6ceb4995a223be7b8832a1d9b40793d6b2cd37d01742d3eea/safeeyes-3.0.0.tar.gz",
    "platform": null,
    "description": "<img src=\"https://raw.githubusercontent.com/slgobinath/SafeEyes/master/safeeyes/platform/icons/hicolor/64x64/apps/io.github.slgobinath.SafeEyes.png\" align=\"left\">\n\n# Safe Eyes\n\n[![Release](https://img.shields.io/github/v/release/slgobinath/SafeEyes)](https://github.com/slgobinath/SafeEyes/releases)\n[![PyPI version](https://badge.fury.io/py/safeeyes.svg)](https://badge.fury.io/py/safeeyes)\n[![Debian](https://badges.debian.net/badges/debian/unstable/safeeyes/version.svg)](https://packages.debian.org/unstable/safeeyes)\n[![AUR](https://img.shields.io/aur/version/safeeyes)](https://aur.archlinux.org/packages/safeeyes)\n[![Flathub](https://img.shields.io/flathub/v/io.github.slgobinath.SafeEyes)](https://flathub.org/apps/details/io.github.slgobinath.SafeEyes)\n[![Translation status](https://hosted.weblate.org/widgets/safe-eyes/-/translations/svg-badge.svg)](https://hosted.weblate.org/engage/safe-eyes/?utm_source=widget)\n[![Awesome Humane Tech](https://raw.githubusercontent.com/humanetech-community/awesome-humane-tech/main/humane-tech-badge.svg?sanitize=true)](https://github.com/humanetech-community/awesome-humane-tech)\n\nProtect your eyes from eye strain using this simple and beautiful, yet extensible break reminder.\n\nVisit the official site: https://slgobinath.github.io/SafeEyes/ for more details.\n\n## Safe Eyes command-line arguments\n\n```text\nusage: safeeyes [-h] [-a | -d | -e | -q | -s | -t] [--debug] [--version]\n\nSafe Eyes protects your eyes from eye strain (asthenopia) by reminding you to\ntake breaks while you're working long hours at the computer.\n\noptional arguments:\n  -h, --help        show this help message and exit\n  -a, --about       show the about dialog\n  -d, --disable     disable the currently running safeeyes instance\n  -e, --enable      enable the currently running safeeyes instance\n  -q, --quit        quit the running safeeyes instance and exit\n  -s, --settings    show the settings dialog\n  -t, --take-break  take a break now\n  --debug           start safeeyes in debug mode\n  --status          print the status of running safeeyes instance and exit\n  --version         show program's version number and exit\n```\n\n## Installation guide\n\nSafe Eyes is available on the official repositories of many popular the distributions.\n\n<a href=\"https://repology.org/project/safeeyes/versions\">\n    <img src=\"https://repology.org/badge/vertical-allrepos/safeeyes.svg\" alt=\"Packaging status\" align=\"right\">\n</a>\n\nIt is also available in Ubuntu PPA, Arch AUR and Python PyPI. You can choose any installation source and install on any Linux system with Python 3.\n\n\n### Ubuntu, Linux Mint and other Ubuntu Derivatives\n\nThe [Official PPA for Safe Eyes](https://launchpad.net/~safeeyes-team/+archive/ubuntu/safeeyes) hosts the latest version of safeeyes **for Ubuntu 22.04 and above**. \n```bash\nsudo add-apt-repository ppa:safeeyes-team/safeeyes\nsudo apt update\nsudo apt install safeeyes\n```\n\nOn older versions of Ubuntu, an older version of Safe Eyes is available on the official repositories.\n```bash\nsudo apt install safeeyes\n```\n\n### Arch\n\n```bash\nyay -S safeeyes\n```\n\n### Gentoo\n\n```bash\nsudo emerge -av x11-misc/safeeyes\n```\n\n### Debian\n\n```bash\nsudo apt-get install safeeyes\n```\n\n### Fedora\nAvailable on the [praiskup/safeeyes](https://copr.fedorainfracloud.org/coprs/praiskup/safeeyes/) COPR maintained by @praiksup\n\n```bash\nsudo dnf -y copr enable praiskup/safeeyes\nsudo dnf -y install python3-safeeyes\n```\nFor smart pause plugin, you may have to install the latest xprintidle from: [alonid/xprintidle](https://copr.fedorainfracloud.org/coprs/alonid/xprintidle/)\n\n### OpenSUSE Tumbleweed\n\n```bash\nsudo zypper refresh\nsudo zypper install safeeyes\n```\n\n### Alpine Linux\n\n```bash\nsudo apk add safeeyes\n```\n\n### Chrome OS\n[Enable the Linux container](https://support.google.com/chromebook/answer/9145439?hl=en) (which is actually Debian), and install Safe Eyes with\n```\nsudo apt install safeeyes\n```\nWhile no tray icon is available, if you run the app, it will function in the background and will show breaks as usual. You can also change the settings by clicking on the Safe Eyes icon from the menu while the app is running, or by running the command `safeeyes -s`.\n\n### Flatpak\n**Warning**: Many plugins and features don't work well in the flatpak. We recommend that you use one of the native packages listed above. Flatpak-only bugs should be reported at https://github.com/flathub/io.github.slgobinath.SafeEyes.\n```bash\nflatpak install flathub io.github.slgobinath.SafeEyes\n```\n\n### Other Linux & Run from source\n\nEnsure to meet the following dependencies:\n\n- gir1.2-notify-0.7\n- gir1.2-gtk-4.0\n- python3-babel\n- python3-croniter\n- python3-gi\n- python3-packaging\n- python3-xlib\n- python3-pywayland (optional for KDE/other wayland)\n- xprintidle (optional for X11)\n- wlrctl (optional for wayland/wlroots)\n- Python 3.10+\n\n**To install Safe Eyes from PyPI:**\n\n```bash\nsudo pip3 install safeeyes\n```\n\nAfter installation, restart your system to update the icons,\n\n**To run from source:**\n\n```bash\ngit clone https://github.com/slgobinath/SafeEyes.git\ncd SafeEyes\npython3 -m safeeyes\n```\n\nSafe Eyes installers install the required icons to `/usr/share/icons/hicolor`. When you run Safe Eyes from source without, some icons may not appear.\n\nNote that on Wayland, this may still not be enough to get window icons working properly, as Wayland requires the .desktop file to match the running application, which is hard to do when running from source. If at all possible, prefer using an installed package.\n\n\n### Install in a virtual environment\n\nSome Linux systems like CentOS do not have matching dependencies available in their repository. In such systems, you can install and use Safe Eyes in a Python virtual environment.\n\n1. Install the necessary dependencies for CentOS 7\n\n    ```bash\n    sudo yum install python3-devel cairo cairo-devel cairomm-devel libjpeg-turbo-devel pango pango-devel pangomm pangomm-devel gobject-introspection-devel cairo-gobject-devel\n    ```\n\n2. Create a virtual environment in your home folder\n\n    ```bash\n    mkdir ~/safeeyes\n    cd ~/safeeyes/\n\n    python3 -m venv venv\n    source venv/bin/activate\n    pip3 install safeeyes\n    ```\n\n3. Start Safe Eyes from the terminal\n\n    ```bash\n    cd ~/safeeyes & source venv/bin/activate\n    python3 -m safeeyes\n    ```\n\nFor more details, please check the issue: [#329](https://github.com/slgobinath/SafeEyes/issues/329)\n\nThis method has the same caveats about icons/window icons as running from source.\n\n## Features\n\n- Remind you to take breaks with exercises to reduce RSI\n- Disable keyboard during breaks\n- Notification before and after breaks\n- Smart pause if system is idle\n- Multi-screen support\n- Customizable user interface\n- Command-line arguments to control the running instance\n- Customizable using plug-ins\n\n## Third-party Plugins\n\nThirdparty plugins are available at another GitHub repository: [safeeyes-plugins](https://github.com/slgobinath/safeeyes-plugins). More details about how to write your own plugin and how to install third-party plugin are available there.\n\n## Local development\n\nWhen adding new translatable strings in the source code, make sure to run `python validate_po.py --extract` to add them to the translation template. You will need to install `python3-polib` for this.\n\nExamples for translatable strings are `_(\"This is a string\")` in Python code, or `<property name=\"label\" translatable=\"yes\">This is a label</property>` in Glade/xml files.\n\nTo ensure the new strings are well-formed, you can use `python validate_po.py --validate`.\n\nTo ensure that the coding and formatting guidelines are followed, install [ruff](https://docs.astral.sh/ruff/) and run `ruff check` and `ruff format --check` to check for issues, as well as `ruff check --fix` and `ruff format` to autofix them.\n\nTo ensure that any types are correct, install [mypy](https://github.com/python/mypy) and run `mypy safeeyes`.\n\nTo ensure that the tests still pass, install [pytest](https://docs.pytest.org/en/stable/) and run `pytest`.\n\nThe last four checks are also run in CI, so a PR must pass all the tests for it to be mmerged.\n\nIt is also possible to use dependency groups to install the needed dependencies. When using a new enough version of pip, run `pip install --group types` to install all dependencies to run the type check.\nThe available dependency groups can be found in the `pyproject.toml` file.\n\n## How to Release?\n\n0. Run `update-po.sh` to generate new translation files (which will be eventually updated by translators). Commit and push the changes to the master branch.\n1. Checkout the latest commits from the `master` branch\n2. Run `python3 -m safeeyes` to make sure nothing is broken\n3. Update the Safe Eyes version in the following places (Open the project in VSCode and search for the current version):\n    - [pyproject.toml](https://github.com/slgobinath/SafeEyes/blob/master/pyproject.toml#L4)\n    - [pyproject.toml](https://github.com/slgobinath/SafeEyes/blob/master/pyproject.toml#L35)\n    - [io.github.slgobinath.SafeEyes.metainfo.xml](https://github.com/slgobinath/SafeEyes/blob/master/safeeyes/platform/io.github.slgobinath.SafeEyes.metainfo.xml#L56)\n    - [about_dialog.glade](https://github.com/slgobinath/SafeEyes/blob/master/safeeyes/glade/about_dialog.glade#L74)\n4. Update the [changelog](https://github.com/slgobinath/SafeEyes/blob/master/debian/changelog) (for Ubuntu PPA release)\n5. Commit the changes to `master`\n6. Create a pull-request from `master` to `release`\n7. Merge the PR to release **with merge commit** (Important to merge with merge commit)\n\n## How you can help improving translation of Safe Eyes\n\nFirst check if translations for your language are already available on [Weblate](https://hosted.weblate.org/engage/safe-eyes/), which is the cloud based translation platform we use. \n\n- If the language is already there, feel free to add new translations or improve the existing ones.\n- If it is not there, please [open an issue](https://github.com/slgobinath/SafeEyes/issues) in Github so that we can add your language to Weblate.\n\n## License\n\nGNU General Public License v3\n",
    "bugtrack_url": null,
    "license": null,
    "summary": "Protect your eyes from eye strain using this continuous breaks reminder.",
    "version": "3.0.0",
    "project_urls": {
        "Downloads": "https://github.com/slgobinath/SafeEyes/archive/v3.0.0.tar.gz",
        "Homepage": "https://github.com/slgobinath/SafeEyes"
    },
    "split_keywords": [
        "linux",
        "utility",
        "health",
        "eye-strain",
        "safe-eyes"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "aa996468f5e397cb3ecdfd9ce1a21f0f4dec3f18b1a998aab2b599865d016cdc",
                "md5": "3f15d58754bc9ea71aeb33dc36a604ef",
                "sha256": "3cffb812412e823a82968684b69d407a57ed3b1f667b5bacc3e6658f9b481298"
            },
            "downloads": -1,
            "filename": "safeeyes-3.0.0-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "3f15d58754bc9ea71aeb33dc36a604ef",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.10",
            "size": 639067,
            "upload_time": "2025-08-24T20:02:40",
            "upload_time_iso_8601": "2025-08-24T20:02:40.679791Z",
            "url": "https://files.pythonhosted.org/packages/aa/99/6468f5e397cb3ecdfd9ce1a21f0f4dec3f18b1a998aab2b599865d016cdc/safeeyes-3.0.0-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "6515b7c4cf59a5c6ceb4995a223be7b8832a1d9b40793d6b2cd37d01742d3eea",
                "md5": "36bf18c9aa540dd8161bd641c99d53f7",
                "sha256": "32a6a9ca2ed32d716513cf83b91f7e017082f683905a1d39b9c9253a352ceb39"
            },
            "downloads": -1,
            "filename": "safeeyes-3.0.0.tar.gz",
            "has_sig": false,
            "md5_digest": "36bf18c9aa540dd8161bd641c99d53f7",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.10",
            "size": 332877,
            "upload_time": "2025-08-24T20:02:42",
            "upload_time_iso_8601": "2025-08-24T20:02:42.080687Z",
            "url": "https://files.pythonhosted.org/packages/65/15/b7c4cf59a5c6ceb4995a223be7b8832a1d9b40793d6b2cd37d01742d3eea/safeeyes-3.0.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-08-24 20:02:42",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "slgobinath",
    "github_project": "SafeEyes",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "lcname": "safeeyes"
}
        
Elapsed time: 3.48126s