A screensaver for your terminal. Watches for idle activity on Wayland (or X11), then displays animations from sysc-Go when you step away. Runs as a systemd service so it starts with your session.
One-line install:
curl -fsSL https://raw.githubusercontent.com/Nomadcxx/sysc-walls/master/install.sh | sudo bashOr manual install:
git clone https://github.com/Nomadcxx/sysc-walls.git
cd sysc-walls
go run cmd/installer/main.goThe installer automatically:
- Clones the sysc-Go animation library
- Builds all binaries (daemon, display, client)
- Installs to
/usr/local/bin - Sets up the systemd user service
Test your installation first:
sysc-walls-daemon -test # Quick test
sysc-walls-daemon -test -debug # Test with diagnosticsThen enable the service:
systemctl --user enable sysc-walls.service
systemctl --user start sysc-walls.serviceThe default idle timeout is 5 minutes.
Config lives at ~/.config/sysc-walls/daemon.conf:
[idle]
timeout = 5m # How long before screensaver kicks in
min_duration = 30s # Minimum time screensaver runs
[animation]
effect = matrix # Which animation to show
theme = nord # Color scheme
cycle = false # Rotate through effects
[daemon]
debug = false # Enable loggingTo test immediately without waiting:
/usr/local/bin/sysc-walls-daemon -testWant to add your own animations or color schemes?
Available effects:
matrix, fire, fireworks, rain, beams, beam-text, decrypt, pour, aquarium, print
Available themes:
nord, dracula, gruvbox, tokyo-night, catppuccin, material, solarized, monochrome, transishardjob
-
Add your theme palette to
internal/animations/optimized.goin thegetThemePalette()function:"my-theme": {"#color1", "#color2", "#color3", ...},
-
Register it in
internal/config/config.goby adding to theAvailableThemesslice:var AvailableThemes = []string{ // ... existing themes ... "my-theme", }
-
Set it in your config:
[animation] theme = my-theme
-
Implement the effect in sysc-Go (the animation library)
-
Add support in
internal/animations/optimized.goby creating a wrapper struct and adding a case toCreateOptimizedAnimation() -
Register it in
internal/config/config.goby adding to theAvailableEffectsslice:var AvailableEffects = []string{ // ... existing effects ... "my-effect", }
The config validation will automatically show your new options in error messages and help text.
- Go 1.24+ (install)
- Git
- Wayland development libraries (for Wayland support):
# Arch/Manjaro sudo pacman -S wayland # Debian/Ubuntu sudo apt install libwayland-dev # Fedora sudo dnf install wayland-devel
- Kitty terminal (for the screensaver display)
-
Clone the repository:
git clone https://github.com/Nomadcxx/sysc-walls.git cd sysc-walls -
Clone the animation library:
git clone https://github.com/Nomadcxx/sysc-Go.git
-
Build all binaries:
go build -o daemon ./cmd/daemon/ go build -o display ./cmd/display/ go build -o client ./cmd/client/ go build -o installer ./cmd/installer/
-
Install binaries:
sudo cp daemon /usr/local/bin/sysc-walls-daemon sudo cp display /usr/local/bin/sysc-walls-display sudo cp client /usr/local/bin/sysc-walls-client sudo chmod +x /usr/local/bin/sysc-walls-* -
Install systemd service:
mkdir -p ~/.config/systemd/user cp systemd/sysc-walls-user.service ~/.config/systemd/user/sysc-walls.service systemctl --user daemon-reload systemctl --user enable sysc-walls.service systemctl --user start sysc-walls.service
The installer handles all of the above automatically:
go run cmd/installer/main.goOr compile it first:
go build -o installer ./cmd/installer/
sudo ./installer- multi-monitor support - automatically launches on all displays (Niri, Sway, Hyprland)
- native Wayland idle detection via CGO bindings to libwayland-client
- X11 support using xprintidle as fallback
- systemd integration so it starts with your session
- multiple animations: matrix, fire, fireworks, rain, beams, decrypt, pour, aquarium, and more
- color themes: dracula, gruvbox, nord, tokyo-night, catppuccin, material, solarized
- fullscreen terminal rendering that actually uses your entire screen
- resource efficient - sleeps when you're active
Three simple components:
- daemon - Watches for idle activity using Wayland protocols (or X11 as fallback), launches screensaver when you go idle
- display - Renders sysc-Go animations in fullscreen Kitty terminal
- client - CLI tool for managing settings (not required, just convenient)
The daemon uses CGO bindings to native Wayland libraries, following the same approach as swayidle. This means it works reliably across different compositors without depending on archived Go libraries.
Quick test:
sysc-walls-daemon -testTest with diagnostics (shows compositor, outputs, timing):
sysc-walls-daemon -test -debugCheck service logs:
journalctl --user -u sysc-walls.service -fTest idle detection separately:
./test-idle-detector --timeout 10If screensavers only appear on one monitor:
-
Verify compositor detection:
sysc-walls-daemon -test -debug
Should show your compositor (niri/hyprland/sway) and list all outputs.
-
Check compositor is supported:
- Niri: Requires
niri msgcommand - Hyprland: Requires
hyprctlcommand - Sway: Requires
swaymsgcommand
- Niri: Requires
-
Enable debug logging: Edit
~/.config/sysc-walls/daemon.conf:[daemon] debug = true
Then check logs to see focus and launch sequence.
-
If windows don't follow focus: This is usually a timing issue. The daemon waits 100ms after focusing each monitor before launching. Some compositors may need more time.
MIT - Do whatever you want with it.
Built on top of sysc-Go for animations. Inspired by classic terminal screensavers but actually functional on modern Wayland systems.
