Summary
A cross-platform command line tool that keeps your screen awake using a forward looking relative datetime interface.
On macOS, it uses caffeinate. On Linux, it uses systemd-inhibit.
Install
$ pip install keep-screen-alive
Examples
$ date
Wed Jun 1 08:00:00 CDT 2023
$ keep-alive 2h
Keeping alive until 10:00AM CDT, Jun 01, 2023
$ keep-alive 12pm
Keeping alive until 12:00PM CDT, Jun 01, 2023
$ keep-alive 7am
Keeping alive until 07:00AM CDT, Jun 02, 2023
Configuration
Optional TOML config at $XDG_CONFIG_HOME/keep-alive/config.toml (defaults to ~/.config/keep-alive/config.toml). Override with --config PATH.
Define named aliases that resolve based on time-of-day and weekday. Each alias is an ordered list of rules; the first matching rule wins. Top-level [[rule]] entries are global rules, used as defaults when an alias has no matching rule, and when keep-alive is invoked without arguments.
# global rules: defaults for bare invocation and unmatched aliases
[[rule]]
action = "relative_duration"
duration = "30m"
[[alias]]
name = "work"
[[alias.rule]]
start = "05:00"
end = "16:00"
days = ["Mon", "Tue", "Wed", "Thu", "Fri"]
action = "until_window_end"
[[alias.rule]]
action = "relative_duration"
duration = "2h"
[[alias]]
name = "personal"
[[alias.rule]]
start = "09:00"
end = "21:00"
action = "until_window_end"
[[alias.rule]]
action = "relative_duration"
duration = "1h"
[[alias]]
name = "project"
[[alias.rule]]
action = "relative_duration"
duration = "4h"
keep-alive work on a weekday between 5am and 4pm keeps awake until 4pm; otherwise for 2h. keep-alive personal between 9am and 9pm keeps awake until 9pm; otherwise for 1h. keep-alive project keeps awake for 4h unconditionally. Bare keep-alive uses global rules.
keep-alive --list summarizes the loaded config:
personal
09:00-21:00 → until 21:00
always → for 1h
project
always → for 4h
work
Mon, Tue, Wed, Thu, Fri 05:00-16:00 → until 16:00
always → for 2h
global
always → for 30m
Actions
| Kind | Required fields | Target |
|---|---|---|
relative_duration |
duration |
now plus duration |
absolute_time |
time |
today at HH:MM |
until_window_end |
condition's end |
today at the window's end |
extend_window |
condition's end, duration |
window end plus duration |
Durations are parsed by dateparser: 2h, 30m, 1h30m, 1d, 45 minutes, etc.
Conditions
Optional. Omit all fields for an unconditional rule (always matches).
start,end- time-of-day window asHH:MM. Both must be set to form a range. Start inclusive, end exclusive.days- list of weekday abbreviations:Mon,Tue,Wed,Thu,Fri,Sat,Sun. Omit for daily.
Limitations
- Overnight windows (e.g.
start = "22:00",end = "02:00") aren't supported.
Development
Install Poetry and pre-commit, then:
poetry install
pre-commit install
pre-commit install --hook-type commit-msg
Run tests with poetry run pytest. Pre-commit hooks run ruff (lint and format) on commit; the commit-msg hook verifies conventional commit format; pytest runs as a pre-push hook. CI runs the same checks on pull requests and on push to main.
Commit format
Commits follow Conventional Commits. PR titles must match - they become the squash-merge commit subject. Example: feat: add systemd-inhibit backend. Allowed types: feat, fix, docs, style, refactor, perf, test, build, ci, chore, revert. Subject max 72 chars. Scope optional: fix(backends): handle missing caffeinate.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file keep_screen_alive-0.2.1.tar.gz.
File metadata
- Download URL: keep_screen_alive-0.2.1.tar.gz
- Upload date:
- Size: 8.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/6.1.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
468b6778bee03ec71a28d20faa7be70319bfd930a5e879aabaa90960071c7b9a
|
|
| MD5 |
947e35095f8b515eaf896648ab4d8de7
|
|
| BLAKE2b-256 |
7786235ed9d14770efb4aca166e7facd12b5678cf959b36dea26f8d6823c6577
|
Provenance
The following attestation bundles were made for keep_screen_alive-0.2.1.tar.gz:
Publisher:
publish.yml on willist/keep-screen-alive
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
keep_screen_alive-0.2.1.tar.gz -
Subject digest:
468b6778bee03ec71a28d20faa7be70319bfd930a5e879aabaa90960071c7b9a - Sigstore transparency entry: 2215716793
- Sigstore integration time:
-
Permalink:
willist/keep-screen-alive@52cf4985c9f831ed3feadb7893042ed2a28e0057 -
Branch / Tag:
refs/tags/v0.2.1 - Owner: https://github.com/willist
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@52cf4985c9f831ed3feadb7893042ed2a28e0057 -
Trigger Event:
release
-
Statement type:
File details
Details for the file keep_screen_alive-0.2.1-py3-none-any.whl.
File metadata
- Download URL: keep_screen_alive-0.2.1-py3-none-any.whl
- Upload date:
- Size: 10.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/6.1.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e39d1fcffe3e5e0406a1dc266dab26d27229bf682e7d24b9ed61aae4833bc384
|
|
| MD5 |
2e43c11d49fa0c962a34c5644f25bb21
|
|
| BLAKE2b-256 |
8f7102f141df042cc8d1ab74d4eae5c6cf59061120f2dd274caab11683d1abca
|
Provenance
The following attestation bundles were made for keep_screen_alive-0.2.1-py3-none-any.whl:
Publisher:
publish.yml on willist/keep-screen-alive
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
keep_screen_alive-0.2.1-py3-none-any.whl -
Subject digest:
e39d1fcffe3e5e0406a1dc266dab26d27229bf682e7d24b9ed61aae4833bc384 - Sigstore transparency entry: 2215716834
- Sigstore integration time:
-
Permalink:
willist/keep-screen-alive@52cf4985c9f831ed3feadb7893042ed2a28e0057 -
Branch / Tag:
refs/tags/v0.2.1 - Owner: https://github.com/willist
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@52cf4985c9f831ed3feadb7893042ed2a28e0057 -
Trigger Event:
release
-
Statement type: