# tnr
A macOS notification library and CLI tool that provides a simple interface to send notifications using terminal-notifier.
## Features
- đ¯ Simple and intuitive API
- đ§ Both CLI tool and Rust library
- ⨠Support for different notification types (error, warning, info, success)
- đ Clickable notifications with URL support
- đĩ Custom sounds for different notification types
- đĻ Zero external dependencies (except terminal-notifier)
## Prerequisites
This tool requires `terminal-notifier` to be installed on your macOS system:
```bash
brew install terminal-notifier
```
### System Configuration
To use terminal-notifier, you need to configure macOS notification settings:
1. Open System Preferences â Notifications
2. Find and select terminal-notifier
3. Check "Allow Notifications"
4. Set notification style (Banner/Alert) as needed
## Installation
### As a CLI tool
```bash
cargo install tnr
```
### As a library dependency
Add this to your `Cargo.toml`:
```toml
[dependencies]
tnr = "0.1.0"
```
## CLI Usage
```bash
# Basic notification
tnr --message "Hello, World!"
# Notification with title and type
tnr --title "Build Status" --message "Build completed successfully" --type success
# Notification with clickable URL
tnr --message "Check the results" --url "https://github.com"
# Error notification
tnr --message "Something went wrong" --type error
```
### CLI Options
- `--title <TITLE>`: Notification title
- `--message <MESSAGE>`: Notification message (required)
- `--type <TYPE>`: Notification type (error, warning, info, success)
- `--url <URL>`: URL to open when notification is clicked
## Library Usage
```rust
use tnr::{Notify, Type};
fn main() -> Result<(), Box<dyn std::error::Error>> {
// Basic notification
Notify::new("Hello from Rust!")
.send()?;
// Notification with all options
Notify::new("Task completed successfully!")
.with_title("Build Status")
.with_type(Type::Success)
.with_url("https://github.com")
.send()?;
// Error notification
Notify::new("Something went wrong")
.with_type(Type::Error)
.send()?;
Ok(())
}
```
### Available Notification Types
- `Type::Error` - â with "Sosumi" sound
- `Type::Warning` - â ī¸ with "Funk" sound
- `Type::Info` - âšī¸ with "Glass" sound
- `Type::Success` - â
with "Hero" sound
## API Documentation
### `Notify`
The main struct for creating and sending notifications.
#### Methods
- `new(message: impl Into<String>) -> Self` - Create a new notification with a message
- `with_title(self, title: impl Into<String>) -> Self` - Set the notification title
- `with_type(self, notification_type: Type) -> Self` - Set the notification type
- `with_url(self, url: impl Into<String>) -> Self` - Set a URL to open when clicked
- `send(&self) -> Result<(), TnrError>` - Send the notification
### `Type`
Enum representing different types of notifications with associated emojis and sounds.
### Error Handling
The library uses `TnrError` enum for error handling:
- `TnrError::ExecutionFailed` - terminal-notifier execution failed
- `TnrError::CommandNotFound` - terminal-notifier not found on system
## Examples
See the `examples/` directory for more usage examples.
## License
MIT License - see the [LICENSE](LICENSE) file for details.
## Contributing
Contributions are welcome! Please feel free to submit a Pull Request.