kilyabin 95c0373db6 feat: initial implementation of scr33ny OLED screensaver
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.
2026-06-18 00:36:46 +04:00

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.

# 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 protection
  • typewriter — types characters one by one
  • fade — 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
S
Description
OLED-friendly screensaver for Linux/Wayland with customization support
Readme 64 KiB
2026-06-17 22:33:23 +00:00
Languages
Rust 100%