95c0373db6
Screensavers: blank (pure black), GIF animation, static image, text with float/typewriter/fade animations. Widgets: digital/analog clock, date, weather (OpenWeatherMap API). Anti burn-in pixel shift with configurable interval. Wayland-native via winit 0.29 + softbuffer 0.4. TOML config with serde, full CLI via clap, idle daemon mode.
2.8 KiB
2.8 KiB
scr33ny
OLED-friendly screensaver for Linux / Wayland with Material 3 Expressive widgets.
Features
- Pure black default — all OLED pixels off, zero burn-in
- Anti burn-in shift — content subtly shifts every N minutes
- Screensavers: blank, GIF animation, image, text (float / typewriter / fade)
- Widgets: digital/analog clock, date, weather (OpenWeatherMap)
- Wayland-native via winit + softbuffer (no Xorg dependency)
- TOML config — human-readable, well-documented
Install
cargo install --path .
Or build release binary:
cargo build --release
# binary at: target/release/scr33ny
Quick start
# Run with defaults (black screen, no widgets)
scr33ny
# Use a config file
scr33ny --config ~/my-config.toml
# List monitors
scr33ny monitors
# Display on monitor 1
scr33ny --monitor 1
# Show config path
scr33ny config-path
Configuration
Copy the example config:
mkdir -p ~/.config/scr33ny
cp config.toml.example ~/.config/scr33ny/config.toml
See config.md for full reference.
Keyboard shortcuts
| Key | Action |
|---|---|
Q |
Exit screensaver |
Esc |
Exit screensaver |
Idle daemon
For automatic activation on idle, use the daemon mode.
With swayidle (recommended for Sway/wlroots)
# In your Sway config:
exec swayidle -w \
timeout 300 'scr33ny' \
resume 'killall scr33ny'
Built-in daemon
# In config.toml:
[daemon]
enabled = true
idle_timeout = 300
scr33ny daemon
The daemon tries swayidle first; falls back to a simple timer if not found.
Screensaver types
blank
Pure black. Optimal for OLED — consumes near-zero power.
[screensaver]
type = "blank"
gif
Animated GIF, looped.
[screensaver]
type = "gif"
path = "~/.config/scr33ny/cat.gif"
scale = "fit" # fit | fill | original
image
Static image (PNG, JPEG, BMP, WebP).
[screensaver]
type = "image"
path = "~/.config/scr33ny/bg.png"
scale = "fill"
text
Text with animation.
[screensaver]
type = "text"
content = "hello"
font_size = 96.0
color = "#ffffff"
animation = "float" # float | typewriter | fade
Animations:
float— Lissajous curve orbit, maximum anti-burn-in protectiontypewriter— types characters one by onefade— fade in → hold → fade out cycle
Widget reference
See config.md for full widget documentation.
System fonts
scr33ny searches common paths automatically:
/usr/share/fonts/TTF/DejaVuSans.ttf/usr/share/fonts/noto/NotoSans-Regular.ttf/usr/share/fonts/liberation/LiberationSans-Regular.ttf~/.local/share/fonts/(scanned recursively)
If no font is found:
# Arch Linux
sudo pacman -S ttf-dejavu
# Ubuntu / Debian
sudo apt install fonts-dejavu