chore: add README to root

This commit is contained in:
kilyabin
2026-06-18 00:29:27 +04:00
parent 95c0373db6
commit c42cf61db4
+259
View File
@@ -0,0 +1,259 @@
# scr33ny
OLED-friendly screensaver for Linux / Wayland with customization support.
```
scr33ny
```
The screen goes black. OLED pixels turn off. Burn-in protection kicks in.
---
## Features
- **Pure black by default** — all OLED pixels off, near-zero power draw
- **Anti burn-in shift** — content shifts by a few pixels every N minutes
- **Screensavers** — blank · GIF animation · static image · text animation
- **Widgets** — digital/analog clock · date · weather
- **Wayland-native** — winit + softbuffer, no Xorg required
- **TOML config** — one readable file, no boilerplate
---
## Install
```bash
git clone <repo>
cd scr33ny
cargo install --path .
```
Requires a Rust toolchain (`rustup.rs`). No system libraries beyond Wayland.
---
## Usage
```bash
scr33ny # launch with default config
scr33ny --config ~/my.toml # custom config path
scr33ny --monitor 1 # display on monitor 1
scr33ny monitors # list connected monitors
scr33ny config-path # print default config location
scr33ny daemon # start idle-based auto-launch daemon
```
**Exit:** press `Q` or `Esc`.
---
## Quick config
```bash
mkdir -p ~/.config/scr33ny
cp config.toml.example ~/.config/scr33ny/config.toml
$EDITOR ~/.config/scr33ny/config.toml
```
---
## Screensaver types
### blank *(default)*
Pure black. Best for OLED.
```toml
[screensaver]
type = "blank"
```
### gif
Animated GIF, looped.
```toml
[screensaver]
type = "gif"
path = "~/.config/scr33ny/cat.gif"
scale = "fit" # fit | fill | original
```
### image
Static image — PNG, JPEG, BMP, WebP.
```toml
[screensaver]
type = "image"
path = "~/.config/scr33ny/wallpaper.png"
scale = "fill"
```
### text
Text with animation.
```toml
[screensaver]
type = "text"
content = "scr33ny"
font_size = 96.0
color = "#ffffff"
animation = "float" # float | typewriter | fade
```
| Animation | Description |
|-----------|-------------|
| `float` | Lissajous orbit — smooth, non-repeating, maximum OLED protection |
| `typewriter` | Types characters one by one, then restarts |
| `fade` | Fade in → hold → fade out cycle |
---
## Widgets
Each widget is a `[[widgets]]` block in your config.
### Clock
```toml
[[widgets]]
type = "clock"
style = "digital" # digital | analog
font_size = 72.0
color = "#ffffff"
show_seconds = true
[widgets.position]
x = "center" # left | center | right | <0-100>
y = "center" # top | center | bottom | <0-100>
```
### Date
```toml
[[widgets]]
type = "date"
font_size = 28.0
color = "#888888"
format = "%A, %B %d" # strftime format
[widgets.position]
x = "center"
y = 62.0 # 62% from top
```
### Weather
Requires a free [OpenWeatherMap](https://openweathermap.org/api) API key.
```toml
[[widgets]]
type = "weather"
api_key = "YOUR_KEY_HERE"
location = "Moscow"
units = "metric" # metric (°C) | imperial (°F)
font_size = 22.0
color = "#cccccc"
[widgets.position]
x = "right"
y = "top"
```
Weather refreshes every 30 minutes in the background.
---
## Anti burn-in
Two layers of protection:
1. **Screensaver content moves**`float` animation follows a Lissajous curve so the same pixel is never lit for long.
2. **Global pixel shift** — the entire frame is offset by a few pixels every N seconds, cycling through 4 corner positions.
```toml
[display]
burn_shift = 2 # pixels to shift
shift_interval = 120 # seconds between shifts
```
---
## Idle daemon
### With swayidle/hypridle/other idle (recommended)
Example:
```bash
# ~/.config/sway/config
exec swayidle -w \
timeout 300 'scr33ny' \
resume 'killall scr33ny'
```
### Built-in daemon
```toml
[daemon]
enabled = true
idle_timeout = 300
```
```bash
scr33ny daemon
```
Uses `swayidle` if available; falls back to a simple sleep loop otherwise.
---
## Fonts
scr33ny searches common system font paths automatically (DejaVu, Noto, Liberation, Ubuntu, Hack, FreeSans, user fonts in `~/.local/share/fonts/`).
If no font is found:
```bash
# Arch Linux
sudo pacman -S ttf-dejavu
# Ubuntu / Debian
sudo apt install fonts-dejavu
```
---
## Full config reference
See [docs/config.md](docs/config.md).
---
## Project structure
```
src/
├── main.rs CLI entry point
├── config.rs TOML config (serde)
├── canvas.rs Pixel buffer, drawing primitives, font loading
├── app.rs Event loop, render orchestration
├── screensaver/
│ ├── blank.rs Pure black
│ ├── gif.rs GIF animation (frame timing)
│ ├── image_ss.rs Static image
│ └── text.rs Text animations
└── widget/
├── clock.rs Digital and analog clock
├── date.rs Date display
└── weather.rs OpenWeatherMap widget (async)
```
---
## License
MIT