# Sin > 🙏 Forgive me father for I have simply inhibited. **S**imple **In**hibitor (Sin) watches `/proc` for processes matching your patterns and inhibits system idle/sleep while they run. ## Why Your system shouldn't sleep while you're watching a movie, compiling code, or running a long task. Sin prevents that by talking to systemd-logind when your processes are active. I think this is should be a part of the idle program itself, but I could not find an idle daemon that supports this feature. Naturally I made one of my own. You are welcome to use it if this fits your needs. It is easy to **S**imply **In**hibit. This is an _alternative_ to handling inhbiting on a compositor level, and is aimed to detect things a compositor generally cannot. In the case of, e.g., desktop applications I recommend letting your compositor handling the inhibit. I might also support this for Sin in the future. ## How it works 1. You tell Sin which processes to watch (e.g., `mpv`, `steam`, `ffmpeg`) 2. Sin scans `/proc` every few seconds looking for them 3. When found, it grabs a Systemd inhibitor lock 4. When they exit, it releases the lock 5. Your system can sleep again Great success! ## Usage ```bash # Keep system awake while Firefox is running sin -n firefox # Watch multiple processes sin -n steam -n "wine " -n lutris # Prevent sleep (not just idle) while rendering sin -n blender --what=sleep # Custom poll interval sin -n mpv --poll=1.0 ``` ### Options ```plaintext -n, --name PATTERN Process cmdline substring to watch (required, repeatable) --what WHAT What to inhibit: idle, sleep, shutdown, etc. (default: idle) --mode MODE block or delay (default: block) --poll SECONDS How often to check (0.1-3600, default: 2.0) -d, --daemon Run as daemon (fork to background) -q, --quiet Suppress informational output -v, --version Show version -h, --help Show help ``` ## Building ```bash make sudo make install ``` Requires: - GCC or Clang - libsystemd That's it. ## Examples ```bash # Don't idle while gaming sin -n steam -n wine # Keep system awake during long builds sin -n "cargo build" -n "nix build" # Prevent sleep while watching videos sin -n mpv -n vlc --what=sleep # Fast polling for responsive tasks sin -n ffmpeg --poll=0.5 # Run as daemon sin -d -n mpv -n vlc ``` ## Running as a Service A systemd service file is provided in `vendor/sin.service`. Edit it to match your needs: ```bash # Copy and customize the service file sudo cp vendor/sin.service /etc/systemd/system/ sudo nano /etc/systemd/system/sin.service # Edit the ExecStart line # Enable and start sudo systemctl enable --now sin.service ``` ## Why not just use...? ### Systemd-inhibit There are a few alternative options that you could go with. Namely, Sin is inspired by the operating principle of `systemd-inhibit` among those options, but prefers an approach similar to EarlyOOM where you provide the programs that you want to watch instead of launching the program with a systemd-inhibit wrapper. ### Caffeine While researching, I've noticed programs such as **caffeine** and **caffeine-ng** but ultimately decided against those since they seem to be hooking up to more specific APIs than Systemd's own. I also find Python to be unsuitable for production, and have elected to use C for a smaller and faster binary that is easier to bootstrap. If you _do_ use those tools, and would like to try out Sin but cannot make a switch due to missing features, please do create an issue. While I do not wish to support screenlocker-specific APIs, I am happy to implement more generic features such as a tray icon. Maybe even support for other init systems in the future. ### Hand-written Systemd Service Sure, if you'd like to write one yourself. Sin is that Systemd service in my case. Give it a try, maybe I've saved you from some code spent fixing a trivial problem. ## Attributions [Diniamo]: https://github.com/diniamo [Wayhibit]: https://github.com/diniamo/wayhibitor This project was inspired partially by [Diniamo]'s [Wayhibit], which deserves the primary attribution here. I'd also like to thank Systemd developers for `systemd-inhibit`, which has inspired me to write this project and also for the sd-bus API that makes Sin possible. ## License [here]: https://interoperable-europe.ec.europa.eu/sites/default/files/custom-page/attachment/eupl_v1.2_en.pdf This project is made available under European Union Public Licence (EUPL) version 1.2. See [LICENSE](LICENSE) for more details on the exact conditions. An online copy is provided [here].