pwalarmd/pwalarmctl
[![Crates version pwalarmd](https://img.shields.io/crates/v/pwalarmd)](https://crates.io/crates/pwalarmd) [![Crates version pwalarmctl](https://img.shields.io/crates/v/pwalarmctl)](https://crates.io/crates/pwalarmctl) [![GitHub version](https://img.shields.io/github/v/release/amyipdev/pwalarmd)](https://github.com/amyipdev/pwalarmd/releases) [![License](https://img.shields.io/github/license/amyipdev/pwalarmd)](https://www.gnu.org/licenses/old-licenses/gpl-2.0.html)
**pwalarmd** is a command-line (daemon-based) terminal alarm system. It has:
* ⏰ Configuration for as many alarms as you want
* 🎨 Lots of personalization options, including
custom sounds and integration with your
existing notification agent
* 🖥️ Support on both PipeWire and PulseAudio
* 💾 Easy configuration reload/save, including
through the `pwalarmctl` tool
## Installation
### Distro Packages
We don't have any distro packages yet. If you'd like
native distribution packages, help contribute!
### Manual Installation
#### Option 1: Crates.io
Install using `cargo`:
```sh
cargo install pwalarmd
cargo install pwalarmctl
```
#### Option 2: GitHub
Clone the repository:
``` sh
git clone https://github.com/amyipdev/pwalarmd.git
```
Enter and run the apps as needed:
``` sh
cd pwalarmd
# For pwalarmd
cargo run
# For pwalarmctl
cd pwalarmctl
cargo run --
```
Or, install to the system (not tested):
``` sh
cd pwalarmd
cargo install --path .
cd pwalarmctl
cargo install --path .
```
#### Post-Installation
You will need to configure your pwalarmd; this
includes providing sound assets.
## Configuration
You can set a custom config path by setting the
environment variable `PWALARMD_CONFIG` to the path.
All paths should be **absolute** to avoid issues
with daemonization. Otherwise, `pwalarmd` first
looks for `~/.config/pwalarmd/pwalarmd.toml`,
then `/etc/pwalarmd.toml`.
If you're trying to troubleshoot or debug, set
`PWALARMD_NODAEMON=0` as an environment variable or
set `daemon = false` in your config.
## Usage
Run `pwalarmd` to launch the daemon.
Run `pwalarmctl` to control it, or modify the
config file currently being used. For help with
`pwalarmctl`, run `pwalarmctl help`.
To remove an alarm, run `pwalarmctl list`, and note
the 8 characters on the left of the alarm you want
to remove; you can then run `pwalarmctl remove N`,
where N are those characters, to remove the alarm.
## Contributing
Contributions are very much appreciated! There
isn't a formal contributor guide, but you can send
in a Pull Request; we do ask that you sign off
your commits by adding `Signed-off-by: Name `
as the last line of your commit.
If you find a bug or want new features, please
feel free to raise an Issue.
## Limitations and Known Issues
`pwalarmd` may crash under malformed packets.
Work is being done to prevent this from happening.
## Licensing and Credits
This project was made by Amy Parker/amyipdev.
Copyright (C) 2024 Amy Parker, amy@amyip.net.
pwalarmd and pwalarmctl are licensed under the
GPLv. You can view the license in the LICENSE file.
This project is built in Rust, and uses several
Rust crates. You can see these crates in `Cargo.toml`
and `pwalarmctl/Cargo.toml`.
## Motivation
Windows, macOS, iOS, and Android all have usable
alarm subsystems. No such thing exists on most Linux
distros. There generally aren't any CLI-based ones,
with them all being GUI apps; they also often
require that said GUI app be constantly open,
which doesn't meet a lot of use cases.