Watches for idle activity on Wayland (or X11), then displays animations from sysc-Go when you step away. Runs as a systemd user service and supports multi-monitor setups across Niri, Hyprland and Sway, and single-instance coverage on labwc and other Wayland compositors.
One-line install:
curl -fsSL https://raw.githubusercontent.com/Nomadcxx/sysc-walls/master/install.sh | sudo bashyay -S sysc-walls
# or
paru -S sysc-wallsDownload the package for your architecture from the latest release, then install it with your package manager:
# Debian or Ubuntu
sudo apt install ./sysc-walls_*_amd64.deb
# Fedora
sudo dnf install ./sysc-walls-*.x86_64.rpmUse the arm64 or aarch64 package on ARM systems. On X11, install xprintidle as well (sudo apt install xprintidle or sudo dnf install xprintidle). Then enable the user service:
systemctl --user daemon-reload
systemctl --user enable --now sysc-walls.serviceThe service starts with graphical-session.target.
Install the package and Kitty into your user profile:
nix profile install nixpkgs#kitty github:Nomadcxx/sysc-walls
# On X11, add xprintidle as well
nix profile install nixpkgs#xprintidleThe standalone package provides binaries and artwork. For a managed user service on NixOS, add the flake input and module to your system flake, then enable the service:
{
inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
inputs.sysc-walls.url = "github:Nomadcxx/sysc-walls";
outputs = inputs@{ nixpkgs, ... }: {
nixosConfigurations.mymachine = nixpkgs.lib.nixosSystem {
system = "x86_64-linux";
modules = [
./configuration.nix
inputs.sysc-walls.nixosModules.default
{ services.sysc-walls.enable = true; }
];
};
};
}Rebuild with sudo nixos-rebuild switch --flake .#<host>. The module starts the daemon at graphical-session.target; your desktop or compositor session must activate that target. The flake supports x86_64-linux and aarch64-linux.
Or manual install:
git clone https://github.com/Nomadcxx/sysc-walls.git
cd sysc-walls
sudo go run cmd/installer/main.goThe installer automatically:
- Downloads sysc-Go as a Go module dependency (no clone needed)
- Builds all binaries (daemon, display, client)
- Installs to
/usr/local/bin - Sets up the systemd user service
- Stops and disables the legacy root system service if present
- Imports
WAYLAND_DISPLAYfor compositor detection - Backs up and updates your config with current defaults
- Copies bundled ASCII art to
~/.config/sysc-walls/ascii/
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.serviceOlder installs enabled a system-scoped service that ran as root. The standalone installer stops and disables it. If you upgraded through AUR from an older install, run this once if the old system service is still enabled:
sudo systemctl --system disable --now sysc-walls.serviceThe default idle timeout is 5 minutes.
sysc-walls uses sysc-Go for its animations. The images below show selected effects. Run demo mode to cycle through the full catalog:
sysc-walls-daemon -demoView the effects gallery
The gallery lists the remaining effects newest to oldest. Text effects read ASCII art from the configured file.
dracula, catppuccin, catppuccin-mocha, nord, tokyo-night (tokyonight), gruvbox, material, solarized, monochrome, transishardjob, rama, eldritch, dark, ayu, amber, blue, purple, green, orange, rose-pine, kanagawa, noctalia, eldritch-abyss, void, red, cyan, coral, pink
For custom ASCII art, use sysclet to render text with TheDraw fonts and point daemon.conf at it, or write plain text in any editor. See TROUBLESHOOTING.md for setup.
Config lives at ~/.config/sysc-walls/daemon.conf:
[idle]
timeout = 5m # How long before screensaver kicks in
min_duration = 30s # Minimum time screensaver runs
respect_inhibitors = true # Set false to ignore inhibitors (requires ext-idle-notify v2)
[animation]
effect = matrix-art # Which animation to show
theme = rama # Color scheme
follow_shell = true # Follow sysc-shell's current named theme
datetime = false # Enable datetime display
cycle = false # Rotate through effects
[datetime]
position = bottom # top, center, bottom
interval = 1s # Clock update interval
[daemon]
debug = false # Enable detailed logging
[terminal]
kitty = true # Use Kitty terminal (required)
fullscreen = true # Launch fullscreenSet respect_inhibitors = false to use ext-idle-notify v2's input-only request. On v1 compositors, the daemon warns and continues respecting inhibitors.
Available effects:
These names match the enabled effect IDs from sysc-Go. Text effects use the ASCII art file configured with file.
Text effects: matrix-art, fire-text, rain-art, beam-text, decrypt, pour, print, blackhole, ring-text, ak-47-text.
Standalone effects: matrix, fire, fireworks, rain, beams, aquarium, skull, sonar, cracktro, sysc-logo, cross-logo, logo-morph, ak-47, l2a1-sar, great-wave, wasteland.
Rotating model effects: jesus-christ-statue, jason, nymphe-der-flora, lowe, roman-gladiator, grabfigur, laocoon-and-his-sons, napoleon-bust, brandenburg-gate, louis-xiv, engel, st-george, santa-muerte, aspasia, st-nepomuk, lion-statue, f-14-tomcat, f-15e-strike-eagle, f-22-raptor, fa-18e-super-hornet.
Preview a rotating aircraft, then make it the screensaver effect:
sysc-walls test f-14-tomcat kanagawa
sysc-walls set effect f-14-tomcatAvailable themes:
dracula, catppuccin, catppuccin-mocha, nord, tokyo-night (tokyonight), gruvbox, material, solarized, monochrome, transishardjob, rama, eldritch, dark, ayu, amber, blue, purple, green, orange, rose-pine, kanagawa, noctalia, eldritch-abyss, void, red, cyan, coral, pink
sysc-walls reads $XDG_CONFIG_HOME/sysc-shell/shell-theme each time the screensaver starts. When XDG_CONFIG_HOME is unset, it reads ~/.config/sysc-shell/shell-theme. A named theme change in sysc-shell applies at the next activation. If the file is missing or the theme is unsupported, sysc-walls uses theme from this file. Set follow_shell = false or run sysc-walls set follow-shell false to use an independent theme. Running sysc-walls set theme <name> disables following; run sysc-walls set follow-shell true to enable it again.
For detailed configuration options and troubleshooting, see TROUBLESHOOTING.md.
Quick build with installer (recommended):
git clone https://github.com/Nomadcxx/sysc-walls.git
cd sysc-walls
sudo go run cmd/installer/main.goManual build:
# Clone and build
git clone https://github.com/Nomadcxx/sysc-walls.git
cd sysc-walls
# The daemon links the Wayland client library for its CGO idle monitor.
# On Debian/Ubuntu:
sudo apt-get install -y build-essential pkg-config libwayland-dev wayland-protocols
go build -o bin/sysc-walls-daemon ./cmd/daemon/
go build -o bin/sysc-walls-display ./cmd/display/
go build -o bin/sysc-walls-client ./cmd/client/
# Install binaries
sudo cp bin/sysc-walls-* /usr/local/bin/
sudo chmod +x /usr/local/bin/sysc-walls-*
# Copy ASCII art
mkdir -p ~/.config/sysc-walls/ascii
cp assets/ascii/*.txt ~/.config/sysc-walls/ascii/
# Setup systemd
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.serviceThree components:
1. Daemon (cmd/daemon/)
Systemd service that monitors idle time via Wayland's ext-idle-notify-v1 protocol (X11 via xprintidle). Detects compositor (Niri/Hyprland/Sway/labwc), launches screensaver on all monitors, kills on activity. See pkg/idle/ for CGO bindings and internal/compositor/ for multi-monitor logic.
2. Display (cmd/display/)
Renders sysc-Go animations in fullscreen Kitty terminals. Wraps effects with terminal sizing, theme application, and ASCII art loading. See internal/animations/.
3. Client (cmd/client/)
Optional CLI for testing. Not needed for normal operation.
Config lives in ~/.config/sysc-walls/daemon.conf (see internal/config/). Build uses sysc-Go as a Go module dependency (v1.0.10+).
Datetime behavior:
- Text-updatable effects (
fire-text,matrix-art,rain-art,beam-text,decrypt,pour,print,blackhole,ring-text) render the clock as live text inside the effect. - Non-text effects keep the overlay fallback path.
Display flags:
-datetime-datetime-position top|center|bottom-datetime-interval 1s
Quick test:
sysc-walls-daemon -testTest with full diagnostics:
sysc-walls-daemon -test -debugCheck service status:
systemctl --user status sysc-walls.serviceView live logs:
journalctl --user -u sysc-walls.service -fEnable debug logging permanently:
Edit ~/.config/sysc-walls/daemon.conf:
[daemon]
debug = trueFor detailed troubleshooting, compositor-specific setup, and common issues, see TROUBLESHOOTING.md.
Work in Progress:
- DateTime Effects - Render time/date as negative space with effects filling around glyphs (fire-datetime, matrix-datetime, etc.)
- VOID Theme - New dark theme with deep blacks and subtle accents
- Better X11 Support - Improved compatibility beyond xprintidle, multi-monitor X11, hybrid Wayland/X11
Have a feature request? Open an issue on GitHub.
- sysc-Go - Terminal animation library that powers sysc-walls effects. Includes CLI tools and interactive TUI for creating ASCII art.
- sysc-greet - Console greeter for greetd with sysc-Go animations and video wallpapers
- sysclet - Text headers from TheDraw fonts, exported to sysc-walls, sysc-greet and sysc-terminal
- moonbit - Modern system cleaner with TUI for reclaiming disk space
- terminaltexteffects - Inspiration for terminal visual effects
- sysc-Go - Core animation library used for all effects
GPL-3.0. Model and dependency notices are in THIRD_PARTY_NOTICES.md.
— terminal-native tooling for the linux desktop.
More projects → · Sponsor ❤️